我有一个通用函数,它将接口作为一种类型,现在在一种情况下,我必须根据接口创建一个新类。我一直在考虑它,解决它的一种方法是使用 IoC,但我希望有另一种方法,因为 IoC 似乎有点矫枉过正。
下面是使用访问者模式的尝试:
public class RepositoryManager<T> : IRepositoryManager<T> where T : class, new()
{
public T GetOrCreate(string id)
{
T item = (T)CreateNew(new T(), id);
return item;
}
}
如果我得到一个对象而不是接口,那么我可以使用访问者模式来确定要实例化的类,但根据提供的接口,我似乎无法弄清楚这一点。
我的另一个想法是,我是否可以像 or 一样做出 where 声明?
public class RepositoryManager<T> : IRepositoryManager<T> where T : class, Iabc or Ixyz, new()
我希望问题很清楚:)
-标记
谢谢你的回复。
问题是该方法可以分配有许多不同的接口,例如:
RepositoryManager 类:
private static IMedicament CreateNew(IMedicament emptyType, string id)
{
return new Medicament { Id = id };
}
private static IRefund CreateNew(IRefund emptyType, string id)
{
return new Refund { Id = id };
}
RepositoryManager<Iabc> abcRepository = new RepositoryManager<Iabc>();
RepositoryManager<Ixyz> xyzRepository = new RepositoryManager<Ixyz>();
Iabc abc = abcRepository.GetOrCreate("12345");
Ixyz xyz = xyzRepository.GetOrCreate("12345");
所以使用T item = (T)CreateNew(new T(), id);
不起作用,因为我必须告诉它 T 可以是 Iabc 或 Ixyz 类型,但是当我这样做时,我收到以下错误:
以下方法或属性之间的调用不明确:RepositoryManager<T>.CreateNew(IMedicament, string)
和RepositoryManager<T>.CreateNew(IRefund, string)
除了多次复制代码之外,如果我能做到这一点,那就太好了。