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