Autofac筆記

Select *
Program
Published in
May 14, 2021

Autofac是一個依賴注入(Dependency Injection,DI)的容器套件,達到控制反轉(Inversion of Control,IoC)的設計原則,降低程式碼的耦合性。

依賴注入(DI)

將類別與類別間,搭配介面(interface)的形式進行注入,讓程式可以更靈活的抽換,有較高的變換彈性。達到控制反轉的效果。

控制反轉(IoC)

一種程式設計方式,把功能拆成介面與實作,在使用時才來決定這個介面要使用哪一個實作方式,降低程式碼靈活性不足的情形。

假設程式架構如下

介面IOutputService有方法Write()

ConsoleApp.Interdace.IOutputService.cs

類別OutputService繼承IOutputService,並實作Write()方法

ConsoleApp.OutputService.cs

類別Application注入介面IOutputService,執行Write()方法

ConsoleApp.Application.cs

類別Program呼叫Application來輸出內容

ConsoleApp.Program.cs

執行後顯示

加入Auofac

NuGet下載Auofac

註冊Component和Service

調整類別Program的程式碼

註冊完後執行,就會看到一樣的輸出內容。

RegisterAssemblyTypes

在註冊Component和Service時,可以使用SACN的方式大量註冊。

BeginLifetimeScope

為了避免Autofac新建立完物件,沒有釋放掉而造成記憶體爆炸,可以使用使用Using和BeginLifetimeScope(),建立的物件在Using結尾都會自動被釋放。

後記

可將註冊Component和Service的程式碼另外寫在其他Class(假設類別命名為AutofacConfig)中,再到Global.asax中註冊。

這樣未來在抽換介面與實作時,只要將AutofacConfig裡的註冊做調整即可。

--

--