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


說起IOC和DI,使用過ASP.NET Core的人對這兩個概念一定不陌生,早前,自己也有嘗試過去了解這兩個東西,但是一直覺得有點很難去理解,總覺得對其還是模糊不清,所以,趁着今天有空,就去把兩個概念捋清楚,並將學習過程的知識點記錄下來。

 一、IOC和DI的理解

1.1 什么是IOC?

Ioc—Inversion of Control,即控制反轉,其是一種設計思想,而不是一種技術。再沒有使用IOC之前,我們一般是通過new來實例化,從而創建一個對象。但是我們使用IOC之后,創建這個對象的控制權將由內部轉換到外部,那么這個過程便可以理解為控制反轉。

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

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

1.3 IOC和DI的聯系?

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

 1.4 為啥需要反轉?

為了在業務變化的時候盡量減少改動代碼造成的問題。

1.5 使用DI的好處?

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

1.6 常見的IOC框架。

微軟自帶DI、Autofac、Unity

二、.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>();

這三個方法都是將我們實例注冊進去,只不過是生命周期不一樣。

AddSingleton:整個應用程序生命周期以內只創建一個實例,相當於一個靜態類。

AddScoped:在同一個Scope內只初始化一個實例 ,可以理解為( 每一個request級別只創建一個實例,同一個http request會在一個 scope內)。

AddTransient:每一次都會創建一個新的實例。

 2.2 Demo應用

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

4)運行,查看結果

 三、 采用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)運行,查看結果

四、總結

本篇文章,主要是講了IOC和DI的關系,以及通過微軟自帶的IOC框架和Autofac實現在ASP.NET Core中進行簡單注入,其最大的優點就是實現了解耦的作用。同樣,本篇文章也是為了記錄自己學習的過程,后續有時間將會繼續深入研究關於Autofac的內容。

好文參考:https://www.cnblogs.com/laozhang-is-phi/p/9541414.html(老張的哲學)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM