2010-07-01 105 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