Autofac 觀念、實務與紀錄
IoC, DI, Autofac
觀念
IoC, Inversion of Control ,控制反轉。 一種軟體叫用(或引用)資源的行為,一般來說上層才可引用下層資源,下層一般不需要也沒必要引用到上層的資源,因為會不小心就dead lock且破壞架構階層關係(新鮮人常幹這種事)。 IoC就是反過來,可由下層引用上層一小部份資源。傳統上我們用Callback Function(回呼函式)處理這種下對上的需求。現在可以用lamda函式就可以很簡單地實作 IoC 的效果。DI(Dependency Injection) 依賴注入。一種軟體設計模式,介面的實作可在事後更替。用GoF design pattern來類比就是『Bridge pattern』。
Autofac為一種實作DI的軟體技術,並可實現IoC行為。 IoC 的實現用 Callback 或 lamda 就可以辦到,為何還要用Autofac 這麼麻煩呢?因為callback或lamda只能反轉函式,而Autofac可以直接反轉整個物件。
在實際上,大部份 Autofac 只用到 DI 程度,很少用到 IoC 這個有點進階的程度。且Autofac 設計的太靈活非常容易爛用,容易造成架構各階層模組的權責混亂。若非必要請不要用,若真的需要請有限度的使用需要的那一部份就好。
一個現實狀況,DI 在 .NET5/MVC6 似手變成了標備,不用都都行啊。
紀錄
開發環境
IDE: Visual Studio 2017
.NET Fx 4.5.1
MVC 5.2.4
Autofac 4.9.4
Autofac.Mvc5 4.0.2
Autofac 常用三種注射方式.
Constructor injection (基本用法,大部份用這招就能滿足。本例有練習)
Property injection (本例有練習)
Method injection
下層
注入目標介面定義,注入介面只能在下層定義不過可以在上層實作。
下層注入上層資源,一個IoC範例
上層
在上層實作下層介面
上層注入應用範例
Autofac 註冊程序 ※ Autofac 註冊語法中,同一目的有多種寫法,說是彈性然而也是混亂源頭之一, 請謹用。
系統一開始就需啟動註冊程序
(EOF)
Last updated