前言
現在的編程世界中,IOC已經成為了標配,畢竟解耦對於代碼開發和維護都提升了很大的效率;而.NetCore中就自帶了IOC功能,下面記錄一下.NetCore Web項目中IOC的使用及如何集成AutoFac;
環境
開發環境: .NetCore3.1;注:需要安裝對應的SDK版本;
項目創建
1. 選擇模板 -- ASP.NET Core Web應用程序;
2. 添加兩個項目DotNetCoreBll 和 DotNetCoreDal ,選模板的時候選擇 類庫(.Net Core);
最終項目結構
加這兩個程序集的目的就是為了模擬業務處理,DotNetCoreBll 業務處理;DotNetCoreDal 獲取數據; 設置DotNetCoreIoc 為啟動項目運行,如下圖
出現以上界面項目創建成功;
傳統方式--自己New
1. 分別在DotNetCoreBll 和 DotNetCoreDal中增加 類 UserBll 和 UserDal , 里面代碼如下:
類UserDal :
類UserBll:
2. 在HomeController中增加一個Api
然后,運行項目,訪問http://localhost:5000/Home/GetUserName 地址,運行如下:
綜上, 可以看出,傳統方式也能正常開發功能,但是各個程序集之間耦合性太太強,不符合軟件設計原則,當項目規模變大時,項目也不好維護; 從開發角度來說,需要開發人員手動創建對象,開發效率不高;
.NetCore 自帶IOC
三大步走起:
1. 在Web項目中找Startup.cs 文件, 打開文件,在方法ConfigureServices中將對應類型注入到容器中,如下:
2. 在調用控制器構造函數中進行注入, 這里是在HomeController中,如下:
3. 在對應API中使用
運行訪問
如上,正常訪問,但是雖然減少了開發者手動new對象的過程,但是耦合性的問題還是存在的呀,所以這里引入依賴倒置原則,即依賴於抽象,不依賴於具體,所以我們通常會引入對應的抽象層,通常是接口的形式;
抽象化,增加接口層,並添加對應的接口,項目結構如下:
IUserBll 和 IUserDal 代碼代碼分別如下:
將原來的UserBll和UserDal分別繼承IUserBll和IUserDal,如下:
IOC根據以上三步使用,修改對應的代碼
1. 在注入容器中進行優化:
2. 構造函數注入,改為接口:
3. 使用的地方不變
運行如圖,正常運行:
通過這樣優化,耦合性降低了,依賴於抽象,平時也都是這么用;
缺點: 由於.NetCore自帶的IOC,在注冊到容器的時候,只能指定對應的類型,當項目類型比較多的時候,在注冊時就會大量的寫代碼;
措施: 通常我們會引入第三組件進行解決,因為第三方組件提供了注冊程序集的功能,這里主要記錄一下AutoFac在.NetCore項目中的使用;
.NetCore3.1 集成AutoFac
1. 在Web項目中通過Nuget引入AutoFac包;
2. 首先在 Startup.cs 中添加 ConfigureContainer 方法, 方法名不變;
3. 修改 Program.cs 將默認ServiceProviderFactory指定為AutofacServiceProviderFactory
弄完以上步驟,注釋掉原來的注入
運行項目,看結果正常:
總結
綜上所述,.NetCore項目中Ioc及集成Autofac的使用看着比較簡單,但以上例子只修改了業務層, Dal層沒有優化,你們可以參考業務層,可以練習一下Dal層的優化; 另外Autofac的知識點還不少,如果不知道的,自行百度學學,有問題隨時溝通;
關注公眾號,每周最少兩篇關於.NetCore相關文章