我有这样的设计:
public interface IFactory<T> {
T Create();
T CreateWithSensibleDefaults();
}
public class AppleFactory : IFactory<Apple> { ... }
public class BananaFactory : IFactory<Banana> { ... }
// ...
虚构的Apple
和Banana
这里不一定共享任何共同的类型(object
当然,除了 )。
我不希望客户必须依赖特定的工厂,因此,您可以向 a 索要FactoryManager
一种新类型。它有一个FactoryForType
方法:
IFactory<T> FactoryForType<T>();
现在您可以使用类似FactoryForType<Apple>().Create()
. 到目前为止,一切都很好。
但是在实现层面有一个问题:我如何存储这个从类型到IFactory<T>
s的映射?天真的答案是IDictionary<Type, IFactory<T>>
,但这不起作用,因为T
(我使用的是 C# 3.5)上没有类型协变。我只是坚持IDictionary<Type, object>
并手动进行铸造吗?