依賴注入解析

2022-09-23 19:15:11 字數 2066 閱讀 4297

依賴注入軟體設計模式

為了更好地理解依賴注入的概念,首先了解一下軟體設計模式是很有必要的。軟體設計模式主要用來規範問題及其解決方案的描述,以簡化開發人員對常見問題及其對應解決方案的標識與交流。

控制反轉ioc

幾乎每個人都看過或是自己寫過下面**的經歷

1 public class emailservice

2

7 }8 9 ///

10 /// 耦合實現

11 ///

12 public class notificationsys

13

20 21 public void interestingeventhappened()

22

25 }

view code

上述**中,notificationsys 類依賴emailservice類,當乙個元件依賴其他元件稱之耦合。在軟體設計過程,高耦合通常認為是軟體設計的責任。當乙個類精確地知道另乙個類的設計和實現時,就會增加軟體修改的負擔,因為修改乙個類很有可能破壞依賴它的另乙個類。為降低元件之間的耦合程式,一般採取兩個獨立但相關的步驟:

1.在兩塊**之間引入抽象層,所以上述**可修改為以下

1 public inte***ce iemailservice

2

5 public class emailservice : iemailservice

6 11 }

12 ///

13 /// 抽象介面來實現

14 /// (把抽象實現的責任移到消費者的外部)

15 ///

16 public class notificationsys1

17

23 public void interestingeventhappened()

24

27 }

view code

2.把選擇抽象實現的責任移到消費者類的外部。

控制反轉(ioc)模式是抽象的;把依賴的建立移到使用這些的類的外部,這稱為控制反轉模式,之所以以這樣命名,是因為反轉的是依賴的建立,正因為如此,才消除消費類對依賴建立的控制。

依賴注入di依賴注入是另一種控制反轉模式形式,它沒有像伺服器定位器一樣的中間物件。相反,元件以一種允許依賴的方式編寫,通常由構造函式引數或屬性設定器來顯式表示。

1. 建構函式注入

di的最常見形式是建構函式注入。該技術需要我們為類建立乙個顯示表示所以依賴的建構函式。

1 ///2 /// 構造注入

3 ///

4 public class notificationsys

5 12 public void interestingeventhappened()

13

16 }

view code

優點: 極大簡化建構函式的實現;減少了notificationsys類需要知道的資訊量;需求的透明性,任何想建立notificationsys類例項的**都能檢視建構函式,並精確的知道哪些內容是消費者必須的。

2.屬性注入

屬性注入是一種不太常見的依賴注入方式。顧名思義,該方式是通過設定物件上公共屬性而不是通過使用構造函式引數來注入依賴。

public class notificationsys

public void interestingeventhappened()

}view code

顯而易見,這裡我們已經減少了需求的透明性,而且絕對比建構函式注入更容易產生錯誤。

選擇屬性注入原因:

如果依賴在某種意義上是真正可選的,即在消費者類不提供依賴時,也有相應的處理,屬性注入是個不錯的選擇

類的例項可能需要在我們還沒有控制呼叫的建構函式的情況下被建立

依賴注入容器依賴注入容器是乙個可以作為元件工廠使用的軟體庫,它可以自動檢測和滿足裡面元素的依賴需求。常見的di容器有castlewindsor,unity,autofac, objectbuilder,structuremap,spring.net

路漫漫其修遠兮, 吾將上下而求索

spring 依賴注入 Spring依賴注入

依賴注入 dependency injection,簡稱di 與控制反轉 ioc 的含義相同控制反 在使用spring框架之後,物件的例項不再由呼叫者來建立,而是由spring容器來建立,spring容器會負責控制程式之間的關係,而不是由呼叫者的程式 直接控制,這樣控制權由應用程式轉移到了sprin...

ioc(依賴 依賴倒置 依賴注入)

先看一下這個大佬的部落格 我只是畫個圖 1.依賴 這個很不友好,要換別的player或者meidafile要動operation 2.依賴倒置 這個好很多了,加了兩個介面,要換別的player或者meidafile,不用動operation 3.ioc 控制反轉 控制權是我們使用者自己,如果是spr...

C 依賴注入 setter注入

在文章 c 依賴注入 初步概念了解 中,簡單的介紹了依賴注入常用三種方式 setter注入,建構函式注入,介面注入。在此文章中,使用 具化對setter注入的解釋。setter注入 就是在類a裡面定義乙個c介面的屬性d,在a的上下文通過b例項化乙個物件,然後將這個物件賦值給屬性d。主要就是set 與...