我有以下定义。
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,说“没有匹配的绑定可用”。再一次,我期待它只发送一个空的可枚举。
那么,这种行为是否真的是设计预期的,或者这里有错误吗?如果是设计,是否有解决方法?
答案 0 :(得分:2)
我今天和Ian讨论了这个和构造函数的得分。我们都同意我们应该改变这一点。只是有点耐心等待我们实施它。