2010-06-30 144 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