C# 依赖注入问题
我有三门课:A、B和C 所有这些类都实现了接口IMyInterface 我希望接口的定义如下: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
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;
}
}