背景知識
控制反轉
反轉傳統的控制邏輯,常見的傳統控制邏輯有:
一、客戶類型負責創建依賴。反轉后的結構是:由IOC負責創建。
二、客戶類型調用框架。反轉后的結果是:框架調用客戶類型。
依賴注入
客戶類型需要顯式的聲明其依賴,不要在客戶類型中管理依賴的創建。
IOC
中文可以翻譯為:控制反轉容器或依賴注入容器。
參考資料
Inversion of Control Containers and the Dependency Injection pattern
.NET:在ASPX、ASHX和MVC中使用IOC容器(菜鳥必看)
為什么要使用IOC容器?
從對象的角度思考什么系統
系統是由一張對象圖組合而成,這些對象通過彼此之間的協作(發送消息)來完成需求。概括如下:
系統 = 對象圖
基於類的語言如何表示系統
毫無疑問,在基於類的語言中:系統 = 類型定義 + 對象圖(如何實例化)
考慮一個三層架構中的類圖

如何創建這個類圖的對象圖?
簡單的來說,我們有兩種思路:
一、客戶類型負責new依賴類型。這樣做的結果是:
-
- 類圖就是對象圖,編譯時綁定。
- 需要手工管理依賴的生命周期。
- 很難做單元測試。
- 很難升級和維護,比如:引入了一個新的子類,你要到處修改new的代碼。
二、采用IOC容器new依賴類型。這樣做的結果是:
-
- 類圖不一定是對象圖,運行時綁定。
- IOC容器掛自動管理的生命周期。
- 容易做單元測試。
- 容易升級和維護。
備注
有人說IOC的注冊太麻煩,比new還麻煩,針對這個問題的思路是:“根據約定自動注冊”,我就采用這種方式。
