我有这个问题,我觉得可以通过多种方式解决,但不确定最有效的方法是什么。在 SO at collection of different generic types上发现了同样的问题,但似乎没有任何解决方案。我想复活这个问题并挑选专家的大脑!
就我而言,我有一份合同:
public interface IServiceInvoker<TServiceContract>
{
}
实际上这也涉及到一个抽象类来集中一些核心代码,但我不打算在这里包含它,以免问题变得过于复杂。
TServiceContract 类型可以是任何服务接口。因此它不限于任何特定类型,因为实现类将验证服务等。然后我有这个类(下面的 ServiceDAO)来封装这个和其他引用的基本使用。我正在尝试创建 IServiceInvoker 类型的集合属性,但没有运气......基本上我所拥有的是:
public class ServiceDAO
{
private Dictionary<string, object> _serviceInvocationCollection = new Dictionary<string, object>();
public IEnumerable<KeyValuePair<string, object>> ServiceInvocationCollection
{
get { return _serviceInvocationCollection.AsEnumerable<KeyValuePair<string,object>>(); }
private set { _serviceInvocationCollection = value as Dictionary<string, object>; }
}
}
我宁愿集合是 IServiceInvoker 的类型,但不能在类级别指定 TServiceContract 类型,因为集合可以使用任意数量的 IServiceInvoker 实现类...使用对象代替似乎过于松散类型.. . 任何想法或建议表示赞赏!