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)
导致同样的错误。
它必须是
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在类级别指定。否则你必须使用具体类型作为通用参数