使用 NInject 多次将服务绑定到同一服务提供商
Bind a service to several times the same service provider with NInject
我想使用 NInject 的多重绑定进行多次注入,正如 the official documentation 所述,但多次使用相同的绑定。
public class Samurai
{
readonly IWeapon[] allWeapons;
public Samurai(IWeapon[] allWeapons)
{
this.allWeapons = allWeapons;
}
public void Attack(string target)
{
foreach (IWeapon weapon in this.allWeapons)
Console.WriteLine(weapon.Hit(target));
}
}
然后,我希望他有很多Shuriken
,而不是像官方例子那样给Samurai
一个Sword
和一个Dagger
。当然我可以循环绑定,但是有更好的方法吗?也许定义一个扩展方法?
class TestModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
for (int i=0; i<100; i++)
{
Bind<IWeapon>().To<Shuriken>();
}
}
}
我认为 DI 容器不太适合满足此要求。如果有的话,我会在某处配置什么类型和多少 IWeapon
你想为 ICollection<IWeapon>
实例化和绑定一个提供者,然后可以根据配置创建这些。
我想使用 NInject 的多重绑定进行多次注入,正如 the official documentation 所述,但多次使用相同的绑定。
public class Samurai
{
readonly IWeapon[] allWeapons;
public Samurai(IWeapon[] allWeapons)
{
this.allWeapons = allWeapons;
}
public void Attack(string target)
{
foreach (IWeapon weapon in this.allWeapons)
Console.WriteLine(weapon.Hit(target));
}
}
然后,我希望他有很多Shuriken
,而不是像官方例子那样给Samurai
一个Sword
和一个Dagger
。当然我可以循环绑定,但是有更好的方法吗?也许定义一个扩展方法?
class TestModule : Ninject.Modules.NinjectModule
{
public override void Load()
{
for (int i=0; i<100; i++)
{
Bind<IWeapon>().To<Shuriken>();
}
}
}
我认为 DI 容器不太适合满足此要求。如果有的话,我会在某处配置什么类型和多少 IWeapon
你想为 ICollection<IWeapon>
实例化和绑定一个提供者,然后可以根据配置创建这些。