轉載請註明出處:http://www.cnblogs.com/zhiyong-ITNote/ 在基於dotnet core的web開發中,我們會經常用到DI,那麼如果單單使用dotnet core自身提供的一整套DI程式,該如何來實現呢?直接上代碼吧: public interface IBar { ...
轉載請註明出處:http://www.cnblogs.com/zhiyong-ITNote/
在基於dotnet core的web開發中,我們會經常用到DI,那麼如果單單使用dotnet core自身提供的一整套DI程式,該如何來實現呢?
直接上代碼吧:
public interface IBar { void MethodOne(); void MethodTwo(); } public class Bar : IBar { public void MethodOne() { Console.WriteLine("MethOne...."); } public void MethodTwo() { Console.WriteLine("MethTwo...."); } }View Code
我們寫個控制器類:
public class MianController { private IServiceCollection _services; private IServiceProvider _serviceProvider; private IBar _bar; public MianController(IServiceCollection services) { _services = services; _serviceProvider = _services.BuildServiceProvider(); _bar = _serviceProvider.GetService<IBar>(); } public void ActionOne() { _bar.MethodOne(); } public void ActionTwo() { using (var scope = _serviceProvider.CreateScope()) { var bar = scope.ServiceProvider.GetService<IBar>(); bar.MethodTwo(); } } } main函數: static void Main(string[] args) { IServiceCollection services = new ServiceCollection(); services.AddScoped<IBar, Bar>(); var controller = new MianController(services); controller.ActionOne(); controller.ActionTwo(); Console.Read(); }
這裡用到了正常的DI方法也有少用的CreateScope方法,這兩者都是用來獲取指定服務的。具體可以參考 asp.net core 依賴註入實現全過程粗略剖析(3)
轉載請註明出處:http://www.cnblogs.com/zhiyong-ITNote/