依賴注入的定義
控制反轉(Inversion of Control,英文縮寫為IoC)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題。 控制反轉還有一個名字叫做依賴注入(Dependency Injection)。簡稱DI。
構造方法注入
代碼示例
1 public class Service 2 { 3 private readonly IDependService _dependService; 4 5 public Service(IDependService dependService) 6 { 7 _dependService = dependService; 8 } 9 }
意圖:非常強烈的依賴關系,缺少該依賴服務不能正常的履行期職責,運行時不能修改依賴對象(采用readonly聲明)。
屬性注入
代碼示例
1 public class Service 2 { 3 private IDependService _dependService; 4 5 public Service() 6 { 7 _dependService = new DefaultDependService(); 8 } 9 10 public IDependService DependService 11 { 12 set 13 { 14 _dependService = value; 15 } 16 } 17 }
意圖:擁有默認的依賴關系,運行時可以修改依賴對象。
方法注入
代碼示例
1 public class Service 2 { 3 public void Do(IDependService dependService) 4 { 5 //調用依賴 6 } 7 }
意圖:沒辦法采用上邊兩種注入的場景,如:需要從數據庫持久化回來的領域模型;這種模式的依賴會向上傳遞(所有的注入方式都會)直到上層采用構造方法注入和屬性注入。
備注
感謝IOC,沒有IOC,真的很難愛上DI。
