提及IOC和DI,使用過ASP.NET Core的人對這兩個概念必定不陌生,早前,本身也有嘗試過去了解這兩個東西,可是一直以爲有點很難去理解,總以爲對其仍是模糊不清,因此,趁着今天有空,就去把兩個概念捋清楚,並將學習過程的知識點記錄下來。html
全稱爲Dependency Injection,意思自身對象中的內置對象是經過注入的方式進行建立。形象的說,即由容器動態的將某個依賴關係注入到組件之中。git
微軟自帶DI、Autofac、Unitygithub
在start.up類中ConfigureServices方法對實例進行註冊框架
services.AddTransient<IApplicationService,ApplicationService>(); services.AddSingleton<IApplicationService,ApplicationService>(); services.AddScoped<IApplicationService,ApplicationService>();
這三個方法都是將咱們實例註冊進去,只不過是生命週期不同。ide
AddSingleton:整個應用程序生命週期之內只建立一個實例,至關於一個靜態類。函數
AddScoped:在同一個Scope內只初始化一個實例 ,能夠理解爲( 每個request級別只建立一個實例,同一個http request會在一個 scope內)。單元測試
AddTransient:每一次都會建立一個新的實例。學習
4)運行,查看結果測試
Autofac是一款輕量級的IOC框架,目前和ASP.NET Core結合的很是好,官方網站http://autofac.org,源碼下載地址https://github.com/autofac/Autofac。網站
1)在Nuget中引入兩個:Autofac.Extras.DynamicProxy(Autofac的動態代理,它依賴Autofac,因此能夠不用單獨引入Autofac)、Autofac.Extensions.DependencyInjection(Autofac的擴展)var builder = new ContainerBuilder();//實例化Autofac容器 builder.RegisterType<UserService>().As<IUserService>();//註冊要經過反射建立的組件 builder.Populate(services); var ApplicationContainer = builder.Build(); return new AutofacServiceProvider(ApplicationContainer);//第三方IOC接管
3)一樣也是經過構造函數進行注入
4)運行,查看結果
本篇文章,主要是講了IOC和DI的關係,以及經過微軟自帶的IOC框架和Autofac實如今ASP.NET Core中進行簡單注入,其最大的優勢就是實現瞭解耦的做用。一樣,本篇文章也是爲了記錄本身學習的過程,後續有時間將會繼續深刻研究關於Autofac的內容。
好文參考:http://www.javashuo.com/article/p-ggyivcwi-w.html(老張的哲學)