4
我有這樣的設計:如何使這個簡單的C#泛型工廠工作?
public interface IFactory<T> {
T Create();
T CreateWithSensibleDefaults();
}
public class AppleFactory : IFactory<Apple> { ... }
public class BananaFactory : IFactory<Banana> { ... }
// ...
虛構Apple
和Banana
這裏不一定有任何常見的類型(比object
等,當然)。
我不希望客戶必須依賴特定的工廠,所以您可以只需要詢問FactoryManager
以獲取新的類型。它有一個FactoryForType
方法:
IFactory<T> FactoryForType<T>();
現在你可以像FactoryForType<Apple>().Create()
調用適當的接口方法。到現在爲止還挺好。
但是在執行級別存在一個問題:如何將此映射從類型存儲到IFactory<T>
s?天真的答案是IDictionary<Type, IFactory<T>>
,但這不起作用,因爲T
(我使用C#3.5)沒有類型協方差。我只是堅持IDictionary<Type, object>
並手動進行鑄造?
@code詩人,26秒:) – JaredPar 2010-05-19 16:01:50
謝謝!這是關於我現在的;我覺得沒有太多的擺動空間可以使用協變。 – 2010-05-19 16:05:57