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 這麼麻煩呢?因為callbacklamda只能反轉函式,而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 常用三種注射方式.

  1. Constructor injection (基本用法,大部份用這招就能滿足。本例有練習)

  2. Property injection (本例有練習)

  3. Method injection

下層

注入目標介面定義,注入介面只能在下層定義不過可以在上層實作。

下層注入上層資源,一個IoC範例

上層

在上層實作下層介面

上層注入應用範例

Autofac 註冊程序 ※ Autofac 註冊語法中,同一目的有多種寫法,說是彈性然而也是混亂源頭之一, 請謹用。

系統一開始就需啟動註冊程序

(EOF)

Last updated