最近剛開始學.net core,自己一邊看視頻學習一邊寫點東西,然后看到b站有個視頻講的依賴注入的方法
基本的服務用法
public class MyClass
{
private readonly IMyService _service;
public MyClass(IMyService service)
{
_service = service;
}
}
然后視頻講了一個自定義的依賴注入方法
public interface IEngine
{
T Resolve<T>() where T : class;
}
public class EnginContext
{
private static IEngine _engine;
[MethodImpl(MethodImplOptions.Synchronized)]
public static IEngine Initialize(IEngine engine)
{
if (_engine == null)
_engine = engine;
return _engine;
}
public static IEngine Current
{
get
{
return _engine;
}
}
}
public class MyEngine : IEngine
{
private IServiceProvider _serviceProvider;
public MyEngine(IServiceProvider serviceProvider)
{
this._serviceProvider = serviceProvider;
}
public T Resolve<T>() where T : class
{
return _serviceProvider.GetService<T>();
}
}
//startup.cs中加入service
EnginContext.Initialize(new MyEngine(services.BuildServiceProvider()));
//然后就可以在建構式中不使用引數進行注入
public BaseClass()
{
_menu= EnginContext.Current.Resolve<MyService>();
}
使用這樣方法可以直接在函式中進行依賴注入
然后我就想請教大佬們2個問題
1 視頻教程因為是core2.0的,我試過2.0這么用沒問題,但是現在我做的東西是core3.1,這樣用就出現了一個警告:警告 ASP0000 Calling 'BuildServiceProvider' from application code results in an additional copy of singleton services being created. Consider alternatives such as dependency injecting services as parameters to 'Configure'.
英文雖然看得懂但是不明白他說的改法,這個應該怎么改?
2 在用繼承的時候如果基類要用到service的話,用建構式引數的方法貌似繼承的時候服務變數不會被賦值,還有沒有別的方法可以不用引數直接在函式中進行依賴注入
uj5u.com熱心網友回復:
使用 autofac 的話,可以通過屬性注入。還有一些其他的ioc,你自己查一查。
uj5u.com熱心網友回復:
https://www.itsvse.com/thread-7563-1-1.htmluj5u.com熱心網友回復:
第一個問題的提示應該是多創建了一份服務,有辦法改嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/net/38132.html
標籤:ASP.NET
上一篇:在combobox中實作模糊查詢
下一篇:怎么使用c#呼叫MATLAB函式
