五:.net core(.NET 6)使用Autofac實現依賴注入


 Autofac的簡單使用:

 

由於將來可能引用很多包,為了保持統一隊形,我們再新建一個類庫項目Wsk.Core.Package,當做包的引用集合:

 

刪掉Class1,Wsk.CoreWsk.Core.Filter里面到包刪掉,引用到Package里面,然后需要用到包的項目,都引用package這個類庫項目。這樣可以防止將來項目多了,版本環境如果不一致導致的版本沖突。更改以后的目錄架構:

 

 

添加依賴注入的兩個關鍵包:Autofac.Extensions.DependencyInjection 和 Autofac.Extras.DynamicProxy

 

 

 

然后在Program添加Autofac的支持:

 

接着,新建一個類庫項目,例如叫做 Wsk.Core.Service,然后新建一個類,叫做TestAutofac,以及對應的接口 ITestAutofac,以及一個方法叫做Test,用於做依賴注入實現的測試使用:

 

 

接下來,在啟動項目里面添加該依賴項目,然后在Startup里面的ConfigureServices方法里面,添加對ITestAutofac的單例注冊實現:

 

 

改寫先前的WSK控制器,添加構造函數的依賴注入,以及修改或新增一個用於測試的方法,此處改寫了HelloWorld方法,為了看出效果,只打印以上方法的輸出內容:

 

 

測試一下效果:執行程序,並在swagger上面手動調用:

 

顯示預期內容,代表依賴注入成功。

接下來,使用注入整個類庫來實現依賴注入,用於接口和類很多的情況下,為了方便,就可以把類庫下面的所有接口全部暴露出來進行依賴注入。

在啟動項目里面,新建一個文件夾,叫Common,在里面新建類AutofacRegister,並繼承Autofac.Module ,在類下面重寫 Load 方法:

 

 

startup里面,注釋掉上面的實現方法,新建ConfigureContainer容器:

 

 

最后進行啟動測試

 

測試成功,完結撒花~~

 

最后總結一點東西:

AddSingleton(),只在首次請求會創建服務,后續所有請求都會使用該實例。

AddScoped(),不同的請求,實例不同。

AddTransient(),臨時服務,每次請求都會創建一個新的服務實例

 

本篇章有關源碼如下:

 AutofacRegister

public class AutofacRegister: Autofac.Module
    {
        protected override void Load(ContainerBuilder container)
        {
            var assemblysServices = Assembly.Load("Wsk.Core.Service"); // 需要暴露接口所在的程序集
            container.RegisterAssemblyTypes(assemblysServices)
                .SingleInstance()  // 設置單例注入
               .AsImplementedInterfaces() // 把所有接口全暴露出來
               .EnableInterfaceInterceptors(); 
        }
    }
View Code

ConfigureContainer

public void ConfigureContainer(ContainerBuilder container)
        {
            container.RegisterModule(new AutofacRegister());
        }
View Code

TestAutofac 、ITestAutofac

 public class TestAutofac:ITestAutofac
    {
        public void Test()
        {
            Console.WriteLine("This is Autofac Test ……");
        }
    }
View Code
public interface ITestAutofac
    {
        void Test();
    }
View Code

 

最后,如果覺得有幫助,還請各位大大們打賞、點贊或留言

 


免責聲明!

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



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