为什么ninject注入一个空值,它可以注入一个空的可枚举?

时间:2010-11-16 22:23:14

标签: .net collections ienumerable ninject

我有以下定义。

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<Engine>(),Ninject将抛出一个ActivationException,说“没有匹配的绑定可用”。再一次,我期待它只发送一个空的可枚举。

那么,这种行为是否真的是设计预期的,或者这里有错误吗?如果是设计,是否有解决方法?

1 个答案:

答案 0 :(得分:2)

我今天和Ian讨论了这个和构造函数的得分。我们都同意我们应该改变这一点。只是有点耐心等待我们实施它。