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