C#依赖注入问题

时间:2010-06-30 22:24:31

标签: c# dependency-injection inversion-of-control

我有3个班级:A,B和C

所有这些类都实现了一个接口IMyInterface

我希望界面定义如下:

internal IMyInterface<E> where E: class
{
    E returnData();
}

这样它就可以返回E类型的数据。 类型“E”将是使用Entity Framework v4创建的POCO对象。

在另一个课程中我有:

public class MyClass()
{
   IMyInterface<??> businessLogic;

   public setBusinessLogic(IMyInterface<E> myObject)
       where E : class
   {
       businessLogic = myObject;
   }
}

我尝试用<object>代替<??>,但它无法投射我的poco实体类型。

我尝试让我的实体实现一个空接口IEntity然后使用

IMyInterface<IEntity> businessLogic;
...
businessLogic = new A<POCOObject>();

结果:

 Cannot implicitly convert type
 'A<POCOObject>' to
 'IMyInterface<IEntity>'. An explicit
 conversion exists (are you missing a
 cast?)

有什么建议吗?

编辑:我尝试将A,B和C类声明为:

internal class A : IBidManager<EntityObjectType>

internal class A<E> : IBidManager<E> where E : class

导致同样的错误。

1 个答案:

答案 0 :(得分:4)

必须是

public class MyClass<E> where E : IEntity, class
{
   IMyInterface<E> businessLogic;

   public setBusinessLogic(IMyInterface<E> myObject)
   {
       businessLogic = myObject;
   }
}

 public class MyClass
{
   IMyInterface<POCOObject> businessLogic;

   public setBusinessLogic(IMyInterface<POCOObject> myObject)
   {
       businessLogic = myObject;
   }
}

如果您的业务对象要处理任何POCO对象并且每个对象都有一个接口,那么您需要在类级别指定where E : class, IEntity。否则,您可以使用具体类型作为通用arg