2010-06-30 161 views
4

我有3类:A,B,和CC#依赖注入问题

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

我想的接口,像这样被定义:

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

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

在一个单独的I类有:

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 

导致同样的错误。

回答

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; 
    } 
} 

如果Wnt信号业务对象来处理任何POCO对象,他们每个人都有一个接口,那么你就需要在指定where E : class, IEntity班级水平。否则,你有哟使用具体类型的通用参数

+0

Hrmm最初它工作时,我刚做IBidManager businessLogic;然后做了businessLogic =(IBidManager )new A(); ....但由于某种原因,它不工作了... – 2010-07-01 00:21:30

+0

虽然上述解决方案的工作,我不能这样做。在第一个示例中,您在类定义中使用。我们的系统不能以这种方式工作。我想创建一个类,然后调用一个函数来改变IMyInterface对象来引用别的东西。在第二个示例中,它不是动态的,POCOObject对于A,B和C是不同的 – 2010-07-01 00:25:02

+0

它告诉我一个明确的转换存在... hrmm – 2010-07-01 00:29:49