代码之家  ›  专栏  ›  技术社区  ›  Chris Klepeis

依赖注入强制转换问题

  •  1
  • Chris Klepeis  · 技术社区  · 16 年前

    我有几个实现相同接口的类。

    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是一个空白的接口,我使用T4和实体框架生成的POCO类。

    我本可以发誓这是有效的,但我又试了一次,它抛出的错误是:

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

    当我删除(ibidManager)时,Visual Studio会告诉我存在显式转换…但是它是什么呢?

    我不想在创建BusinessManager类时这样定义类型:

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

    此外,我不能在业务经理中创建 IBidManager<E> 参数,因为这是一个n层的ASP.NET应用程序,我不希望UI层知道任何关于ibidManager的信息。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Mark H    16 年前

    如果您可以使用.NET 4.0,那么您可以通过协方差来解决您的强制转换问题。

    interface IBidManager<out E> where E : IEntity.
    
    推荐文章