IOC(Inversion of Control)控制反轉是物件導向程式設計中的一種設計原則,可以用來減低電腦程式碼之間的耦合度。
依賴注入(Dependency Injection)是最常使用的方式。
IOC(Inversion of Control)
以下用程式碼做簡單的範例說明:
1 |
|
ObjectA 使用 ObjectB 的方法去完成一項工作,在 ObjectA 要 new 一個 ObjectB 起來
所以在建立 ObjectA 時,也會把 ObjectB 建立起來
換句話說,現在沒有 ObjectB 就沒有 ObjectA , ObjectA 相依於 ObjectB
如果 ObjectB 需要替換,就必須修改宣告、new 的類型也要修改,可能呼叫的方法也要改,如下:
1 |
|
比較好的設計方式是相依於介面
1 |
|
DI(Dependency Injection)
這樣在抽換物件時,只需要變更建立類型即可,還可以搭配 DI 讓程式碼更靈活
常見的注入方式有三種:
- 建構子注入,這是最常見的方式
1 |
|
- 屬性注入,適合相依物件需要與外部互動
1 |
|
- 參數注入
1 |
|
IOC容器Tool-Autofac
透過NuGet安裝Autofac套件
依照專案是MVC 或是 WebApi 去安裝整合套件
在App_Start資料夾下新增一個AutofacConfig
1 |
|
在Global的Application_Start啟用Autofac
1 |
|
使用方式
- 建構子注入
1 |
|
- using
1 |
|
Multiple implementations of an interface for Autofac
https://edo-van-asseldonk.blogspot.com/2013/01/autofac-and-multiple-implementations-of.html
https://autofaccn.readthedocs.io/en/latest/faq/select-by-context.html
https://www.codeproject.com/Tips/870246/How-to-register-and-use-Multiple-Classes-Implement