代码之家  ›  专栏  ›  技术社区  ›  jpbochi

为什么ninject在可以注入空可枚举项的地方注入空值?

  •  1
  • jpbochi  · 技术社区  · 15 年前

    我有以下定义。

    interface IWeapon {}
    
    class Warrior
    {
     [Inject]
     public IEnumerable<IWeapon> Weapons { get; private set; }
    }
    

    如果我打电话 new StandardKernel().GetAll<IRule>() 可以理解,它返回一个空的可枚举项。

    现在,如果我打电话 new StandardKernel().Get<Engine>() ,返回的战士有一个 null Weapons 财产。不应该注入空的可枚举项吗?


    第二个问题。我修改了 Warrior 分类如下。

    class Warrior
    {
        public IEnumerable<IWeapon> Weapons { get; private set; }
    
     public Warrior(IEnumerable<IWeapon> weapons)
     { this.Weapons = weapons; }
    }
    

    这次,如果我打电话 new StandardKernel().Get<引擎>() Ninject将抛出一个ActivationException,表示“没有可用的匹配绑定”。再一次,我希望它只是发送一个空的枚举。

    那么,这种行为真的是设计所期望的吗?还是这里有bug?如果是设计的,有什么解决办法吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Remo Gloor    15 年前

    今天我和伊恩讨论了这个和构造器得分。我们都同意改变这一点。只要有点耐心,等到我们实施了它。

    推荐文章