C#依赖注入问题

Chr*_*eis 5 c# dependency-injection inversion-of-control

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

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

我希望接口像这样定义:

internal IMyInterface<E> where E: class
{
    E returnData();
}
Run Code Online (Sandbox Code Playgroud)

以便它可以返回类型 E 的数据。类型“E”将是使用实体框架 v4 创建的 POCO 对象。

在一个单独的课程中,我有:

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

   public setBusinessLogic(IMyInterface<E> myObject)
       where E : class
   {
       businessLogic = myObject;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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

IMyInterface<IEntity> businessLogic;
...
businessLogic = new A<POCOObject>();
Run Code Online (Sandbox Code Playgroud)

结果是:

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

有什么建议吗?

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

internal class A : IBidManager<EntityObjectType>
Run Code Online (Sandbox Code Playgroud)

internal class A<E> : IBidManager<E> where E : class
Run Code Online (Sandbox Code Playgroud)

导致同样的错误。

aqw*_*ert 4

它必须是

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

   public setBusinessLogic(IMyInterface<E> myObject)
   {
       businessLogic = myObject;
   }
}
Run Code Online (Sandbox Code Playgroud)

或者

 public class MyClass
{
   IMyInterface<POCOObject> businessLogic;

   public setBusinessLogic(IMyInterface<POCOObject> myObject)
   {
       businessLogic = myObject;
   }
}
Run Code Online (Sandbox Code Playgroud)

如果您希望业务对象处理任何 POCO 对象,并且它们每个对象都有一个接口,那么您需要where E : class, IEntity在类级别指定。否则你必须使用具体类型作为通用参数