2010-04-12 75 views
1

從彙編(或模塊)的角度來看,您如何看待接口(1.assembly)與其實現(2.assembly)的分離?接口的分離與實現

通過這種方式,我們可以使用一些IoC容器來開發更多的解耦設計。 假設我們有一個程序集'A',它僅包含接口。 然後我們有一個引用'A'並實現這些接口的程序集'B'。它僅依賴於'A'。

在彙編'C'中,我們可以使用IoC容器來創建'A'的對象,使用依賴注入來自'B'的對象。 這樣,「B」和「C」是完全不知道(不依賴)本身..

回答

1

我明白你在說什麼,但對接口分離成單獨的DLL的唯一原因是,如果另一個項目將要利用它們。

如果不是,並且同一個項目將使用相同的接口(但多次),則不需要將它們分開。 IOC容器可以簡單地使用同一個程序集中的接口。

考慮:

Assembly 1: 
    IFoo 

Assembly 2: 
    IOC Container 
    ConcreteFooOne : IFoo 

Assembly 3: 
    IOC Container 
    ConcreteFooTwo : IFoo

注意,在這種情況下,每個組件的IOC容器將負責採取一切IFoo實例,並賦予它正確ConcreteFoo

這對接口有一個單獨的程序集是有意義的。每個其他相關程序集(1和2)都可以使用IFoo接口。另一方面,如果ConcreteFooOneConcreteFooTwo這兩個在同一個組件中將不需要拆分出接口IFoo。國際奧委會容器仍然可以利用「即插即用」,在需要時切換具體實例。

更新

基於您的評論你似乎是擔心tieing IOC容器吶組裝。這不是一個問題,並且將容器分離到單獨的組件不是必需的。如果有的話,我會把它作爲代碼味道,更不用說毫無意義的行爲。

+0

如何讓一個程序集包含所有接口,然後引用此接口程序集的其他程序集(彼此獨立)。 然後我們只有一種依賴:接口程序集<--->實現。部件。最後一個程序集將是一個IoC容器,它將鏈接實現。具有DI機制的組件。 – Bonefisher 2010-04-12 18:08:54

+0

@bonefisher - 這聽起來不合適。國際奧委會容器(我不是IOC的專家,最近我已經變得非常癡迷它了)將與具體實現在同一個程序集中。我已經更新了我的答案,試圖反映這一點。 – Finglas 2010-04-12 18:25:41

+0

但您不想爲每個程序集初始化每個容器,只想要一個IoC容器,因此它必須「駐留」在實現之外。組件 – Bonefisher 2010-04-13 05:55:25