IoC就是IoC,不是什麼技術,與GoF同樣,是一種設計模式。c#
這和開發者直接調用API代碼是相反的,所以,框架反轉控制,也就是說對象的建立是由框架本身在某種時候建立。
設計模式
也許你在哪裏已經應用了上面的原則,知識你尚未意識到這一點。
框架
人們經常認爲Inversion of Control(控制反轉)和Inversion of Control Container所表達的意思是差很少的,事實上Inversion of Control是一個更廣義的概念。函數
人們常說的「注入」是容器控制反轉的最主要的用法,這大大的下降了系統的耦合度,簡化了重用性和可測試性。測試
有一張很好的圖形容:spa
(1)services一般是一個抽象的概念,就像你去咖啡店想要一杯咖啡的服務,你不用關心咖啡豆的大小,用的什麼機器。所以設計
你常常會發現您的服務將被定義爲接口,接口是經過定義抽象的和有沒有實現的。code
public interface ICoffeeShop { Future<Coffee> GetCoffee(CoffeeRequest request); }
(2)Component與服務是有關的,服務是一個抽象的概念,他是不會給你咖啡的,而咱們在一個真實的世界中,所以你須要到一個實際的咖啡店中完成這項服務。在C#中一般是指實現服務的類。對象
public class Starbucks: ICoffeeShop { public Future<Coffee> GetCoffee(CoffeeRequest request) { // some implementation } }
咱們要記住正如城裏能夠有不少家咖啡店,一個服務能夠被不少組件實現(就像一家是星巴克,一家是CofeeClub)。
接口
一家咖啡店還以同時賣麪包和烤腸,一個組件能夠實現多個服務。
(3)Dependency
組件是爲了實現服務而存在的,就像一家咖啡店依賴於一些公共服務(電力),還有其供應商提供的豆子和牛奶,因此組件要作的事情最終仍是要委派與一些非本質的方面。
如今我要重複一件很明顯的事情,那就是組件要依賴於其餘服務的組件,這樣就能夠很好的解耦你的咖啡店和牛奶送貨員是如何操做的。
你的組件除了可能依賴於其餘服務的組件,還可能依賴於一些 connectionStrings和一些屬性配置等等。
在C#中依賴一般是經過構造函數和屬性注入的,在一些高級的場景,組件和你執行的類沒有關係。
四、Putting it all together
咱們把他們放在一塊兒,就是一個高效容器的特色,小組件,定義良好,實現少,抽象服務,依賴於其餘組件以及一些配置文件,執行一些服務的規約。
你最終會獲得不少小的,解耦的組件,這將容許你快速的改變和完善在一些特殊需求狀況下。缺點就是你會有不少組件和依賴須要管理。
這就是容器的工做內容。
不斷完善中,敬請期待!