Ninject多重注入并不像我想象的那么贪婪!如何来

本文关键字:贪婪 注入 Ninject | 更新日期: 2023-09-27 18:07:21

如果我有一个类,像这样设置了一个多注入的元素:

public Shogun(IEnumerable<IWeapon> allWeapons)
{
    this.allWeapons = allWeapons;
}

和这样设置的绑定:

Bind<IWeapon>().To<Sword>();
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>();

那么我认为幕府将军会被注入这两种武器?但事实并非如此——它只得到了匕首。

如果我再添加一个这样的绑定:

Bind<IWeapon>().To<Sword>();
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>();
Bind<IWeapon>().To<Shuriken>().WhenInjectedInto<Shogun>();

将军得到了匕首和飞刀。WhenInjectedInto<T>()看起来应该只约束它所应用的绑定,而不影响其他绑定。我觉得这种行为很容易误导人。

谁能解释一下这里发生了什么?

Ninject多重注入并不像我想象的那么贪婪!如何来

这是一个bug -在混合了条件绑定和无条件绑定的情况下,GetAll不会返回所有实例。

在2.4.0.0版本中修复