Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 依赖注入问题_C#_Dependency Injection_Inversion Of Control - Fatal编程技术网

C# 依赖注入问题

C# 依赖注入问题,c#,dependency-injection,inversion-of-control,C#,Dependency Injection,Inversion Of Control,我有三门课:A、B和C 所有这些类都实现了接口IMyInterface 我希望接口的定义如下: internal IMyInterface<E> where E: class { E returnData(); } 结果: Cannot implicitly convert type 'A<POCOObject>' to 'IMyInterface<IEntity>'. An explicit conversion exists (are y

我有三门课:A、B和C

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

我希望接口的定义如下:

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

 Cannot implicitly convert type
 'A<POCOObject>' to
 'IMyInterface<IEntity>'. An explicit
 conversion exists (are you missing a
 cast?)
无法隐式转换类型
“A”到
“IMyInterface”。明确的
转换已存在(您是否缺少
演员?)
有什么建议吗

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

internal class A : IBidManager<EntityObjectType>
内部A类:IBidManager

内部类别A:IBidManager,其中E:class

导致相同的错误。

必须是

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

   public setBusinessLogic(IMyInterface<E> myObject)
   {
       businessLogic = myObject;
   }
}
公共类MyClass,其中E:Entity,class
{
接口业务逻辑;
公共挫折业务逻辑(IMyInterface myObject)
{
businessLogic=myObject;
}
}

公共类MyClass
{
接口业务逻辑;
公共挫折业务逻辑(IMyInterface myObject)
{
businessLogic=myObject;
}
}

如果您让业务对象处理任何POCO对象,并且它们都有一个接口,那么您需要在类级别指定
其中E:class,IEntity
。否则,您必须为泛型arg使用具体类型

Hrmm最初它在我刚做IBidManager businessLogic时工作;然后是businessLogic=(IBidManager)new A()。。。。但由于某种原因,它不再起作用了……虽然上面的解决方案有效,但我不能这样做。在类定义中使用的第一个示例中。我们的系统不是这样设置的。我想创建一个类,然后调用一个函数将IMyInterface对象更改为引用其他对象。在第二个例子中,它不是动态的,POCOObject对于A、B和CIt是不同的,CIt告诉我存在显式转换。。。hrmmYes,因为您希望IMyInteface作为类中的字段,所以类需要泛型参数。因为您想在不同的对象中交换,所以让它们共享一个公共接口就行了。我没有接触过c#4,所以不确定共变/逆变转换是否有用。由于不知道您的业务对象是什么,我认为在某种程度上需要存在一个接口,以便您可以处理不同的实现。我认为,即使您尝试显式转换,您也需要将其转换为一个已知的类型,而在泛型类中,该类型将变得丑陋。很抱歉延迟。。去跑步;)
internal class A : IBidManager<EntityObjectType>
internal class A<E> : IBidManager<E> where E : class
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;
   }
}