如果我有一个设置为多重注入的构造函数的类,就像这样:
public Shogun(IEnumerable<IWeapon> allWeapons)
{
this.allWeapons = allWeapons;
}
并且绑定设置如下:
Bind<IWeapon>().To<Sword>();
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>();
那么我会期望Shogun使用两个武器进行构造,但事实并非如此——它只获得了Dagger。
如果我添加一个额外的绑定,像这样:
Bind<IWeapon>().To<Sword>();
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>();
Bind<IWeapon>().To<Shuriken>().WhenInjectedInto<Shogun>();
然后Shogun获得匕首和手里剑。WhenInjectedInto<T>()
似乎只应该约束应用它的绑定而不影响其他绑定,但实际上并非如此。我发现这种行为非常令人误解。
有人能解释一下这里发生了什么吗?
WhenInjectedInto
的目的,不是吗?我对ninject还很陌生,但据我所知,此功能的目的是处理特定情况,正如您所提到的。您希望将IWeapon
通常绑定到Sword
;然而,当注入到Shogun
中时,您希望它绑定到Dagger
。如果您希望Shogun
同时注入Sword
和Dagger
,则不应使用WhenInjectedInto
,在我看来。 - virtualmicDagger
或Sword
)而非契约(即IWeapon
),而不是说“当将 IWeapon 注入 Shogun 时注入 Dagger”。以这种方式阅读它是有道理的。 - James WorldBind<IWeapon>().To<BoStaff>().When(x => true);
这里根本没有提到“Shogun”,但仍然出现在多重注入中,而“Sword”则没有出现。 - James World