2013-10-07 56 views
0

目前我使用一個通用接口聲明的IoC依賴這樣的:設計,可以「實現N次」

public interface IComposition<T> 
{ 
    T Dependency { get; set; } 
} 

可是偏偏我的實現可以有在同一時間超過一個依賴。

我知道這很荒謬,但只是爲了你們明白我需要什麼... 假設我實現接口多次以解決我的問題:

public class MyClass : IComposition<TypeA>, IComposition<TypeB> 
{ 
    ... 
} 

我相信使用IComposition<T1, T2, ...>或一個ITypeXDependent對於每種類型都不是很好的選擇。 我的核心需要在運行時使用反射來解決依賴關係。所以,這就是爲什麼我不通過構造函數傳遞依賴關係。

有誰知道一些可以幫助我的技巧嗎?

+7

你爲什麼不能簡單地實現該接口多次,因爲你已經說明? –

+2

這種界面的原因似乎完全避開了我。你爲什麼想要這樣的東西? –

+3

另外,你有沒有考慮通過構造函數注入你的依賴,而不是接口繼承?無論如何,在測試過程中處理和使用會更容易。 –

回答

1

除了常規接口,通用的接口可以「實現N次」,因爲用於創建另一個每個泛型類型參數接口類型。關心的唯一的事情就是實現明確的接口:

public interface IComposition<T> 
{ 
    T Dependency { get; set; } 
} 

public class MyClass: IComposition<TypeA>, IComposition<TypeB> 
{ 
    IComposition<TypeA>.TypeA Dependency { get; set; } 
    IComposition<TypeB>.TypeB Dependency { get; set; } 
} 
5

我會使用,代替目前的方案構造函數的參數設置依賴關係:

public class MyClass 
{ 
    public void MyClass(TypeA a, TypeB b) 
    { 
     .... 
    } 
}