從零開始在.NetCore3.1 Web項目中使用IOC

前言

  如今的編程世界中,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

傳統方式--本身New 

  1. 分別在DotNetCoreBll 和 DotNetCoreDal中增長 類 UserBll  和 UserDal  ,  裏面代碼以下:對象

  類UserDal  :blog

  

 

   類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的知識點還很多,若是不知道的,自行百度學學,有問題隨時溝通;

相關文章
相關標籤/搜索