我经常发现自己处于创建通用接口或类的情况,然后想以非通用方式使用此类或接口的不同版本。例如我可能有这样的界面:
interface ICanCreate<T>
{
T NewObject();
}
这允许一个类成为该类型的工厂。然后我想用一个通用的工厂类注册这些,所以我试着写这样的东西:
public class Factory
{
private Dictionary<Type, ICanCreate> mappings; // what do I put here????
public void RegisterCreator<T>(ICanCreate<T> creator)
{
}
public T Create<T>()
{
}
}
在字典中,我使用哪种类型来表示我的价值?我不知道我是否遗漏了某种设计原则,我知道这与 co(ntra?)variance 有很大关系。任何帮助或想法将不胜感激。