2010-07-01 106 views
1

我有幾個實現相同接口的類。C#依賴注入投射問題

interface IBidManager<E> where E : IEntity 

public class BidManager : IBidManager<EntityObject1> 
public class BidManager2 : IBidManager<EntityObject2> 
public class BidManager3 : IBidManager<EntityObject3> 

在我的業務經理級的我:

public class BusinessManager : ManagerBase 
{ 
    private IBidManager<IEntity> _bidLogicManager; 
    ... 

在BusinessManager是一個功能我稱之爲改變_bidLogicManager(MyType的是一個枚舉)

public void SetLogic(MyType auctionType) 
{ 
    switch (MyType) 
    { 
     case AuctionType.Classic: 
      _bidLogicManager = (IBidManager<IEntity>)new BidManager(); 
      break; 
    ... 

IEntity是空白的接口,我用我的POCO類生成的T4和實體框架。

我可以發誓,這是工作,但我再次嘗試它和它的投擲的錯誤sayng:

Unable to cast object of type 'BLL.MyManagers.BidManager' to type 'BLL.BidManagers.IBidManager`1[Entities.IEntity]'. 

當我刪除(IBidManager)視覺工作室告訴我一個明確的轉換不存在...但是嗎?

我不想創建BusinessManager類,像這樣的時候來定義類型:

public class BusinessManager<E> : ManagerBase where E : class, IEntity 
{ 
     IBidManager<E> _bidLogicManager; 

而且,我不能創建在企業管理器需要,因爲這是一個IBidManager<E>參數的函數是一個n層asp.net應用程序,我不想讓UI層知道任何有關IBidManager的信息。

回答

1

如果您可以使用.Net 4.0,則可以通過協方差來解決您的投射問題。

interface IBidManager<out E> where E : IEntity. 
+0

我這樣做,看起來像它的工作!我想這隻需要3個字母來解決它大聲笑。謝謝! – 2010-07-01 01:14:23