淺談ASP.NET Core中IOC與DI的理解和使用

提及IOC和DI,使用過ASP.NET Core的人對這兩個概念必定不陌生,早前,本身也有嘗試過去了解這兩個東西,可是一直以爲有點很難去理解,總以爲對其仍是模糊不清,因此,趁着今天有空,就去把兩個概念捋清楚,並將學習過程的知識點記錄下來。html

 1、IOC和DI的理解

1.1 什麼是IOC?

Ioc—Inversion of Control,即控制反轉,其是一種設計思想,而不是一種技術。再沒有使用IOC以前,咱們通常是經過new來實例化,從而建立一個對象。可是咱們使用IOC以後,建立這個對象的控制權將由內部轉換到外部,那麼這個過程即可以理解爲控制反轉。

1.2 什麼是DI(依賴注入)?

全稱爲Dependency Injection,意思自身對象中的內置對象是經過注入的方式進行建立。形象的說,即由容器動態的將某個依賴關係注入到組件之中。git

1.3 IOC和DI的聯繫?

IOC是一種設計思想,而DI是這種設計思想的一個實現。理解IOC和DI的關鍵是:「誰依賴誰,爲何須要依賴,誰注入誰,注入了什麼」。
●誰依賴於誰:固然是應用程序依賴於IoC容器;
●爲何須要依賴:應用程序須要IoC容器來提供對象須要的外部資源;
●誰注入誰:很明顯是IoC容器注入應用程序某個對象,應用程序依賴的對象;
●注入了什麼:就是注入某個對象所須要的外部資源(包括對象、資源、常量數據)

 1.4 爲啥須要反轉?

爲了在業務變化的時候儘可能減小改動代碼形成的問題。

1.5 使用DI的好處?

1)讓程序之間鬆散耦合,減小依賴,有利於功能複用。
2)讓程序總體結構更加靈活,有利於單元測試。

1.6 常見的IOC框架。

微軟自帶DI、Autofac、Unitygithub

2、.NET Core自身DI使用

2.1.NET Core自身DI

ASP.NET Core自己已經集成了一個輕量級的IOC容器,開發者只須要定義好接口後,在Startup.cs的ConfigureServices方法裏使用對應生命週期的綁定方法便可,常見方法以下

在start.up類中ConfigureServices方法對實例進行註冊框架

services.AddTransient<IApplicationService,ApplicationService>();
services.AddSingleton<IApplicationService,ApplicationService>(); 
services.AddScoped<IApplicationService,ApplicationService>();

這三個方法都是將咱們實例註冊進去,只不過是生命週期不同。ide

AddSingleton:整個應用程序生命週期之內只建立一個實例,至關於一個靜態類。函數

AddScoped:在同一個Scope內只初始化一個實例 ,能夠理解爲( 每個request級別只建立一個實例,同一個http request會在一個 scope內)。單元測試

AddTransient:每一次都會建立一個新的實例。學習

 2.2 Demo應用

1)首先定義好一個IUserService接口,而後實現該接口
  2)在startup.cs類中ConfigureServices方法中添加下面代碼
3)經過構造函數來注入

4)運行,查看結果測試

 3、 採用Autofac替換IOC容器

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的擴展)
2)在startup.cs類中ConfigureServices方法中添加如下代碼:(注意:把返回值類型改成IServiceProvider)
var builder = new ContainerBuilder();//實例化Autofac容器
            builder.RegisterType<UserService>().As<IUserService>();//註冊要經過反射建立的組件
            builder.Populate(services);
            var ApplicationContainer = builder.Build();
            return new AutofacServiceProvider(ApplicationContainer);//第三方IOC接管

3)一樣也是經過構造函數進行注入

4)運行,查看結果

4、總結

本篇文章,主要是講了IOC和DI的關係,以及經過微軟自帶的IOC框架和Autofac實如今ASP.NET Core中進行簡單注入,其最大的優勢就是實現瞭解耦的做用。一樣,本篇文章也是爲了記錄本身學習的過程,後續有時間將會繼續深刻研究關於Autofac的內容。

好文參考:http://www.javashuo.com/article/p-ggyivcwi-w.html(老張的哲學)

相關文章
相關標籤/搜索