Ninject 是否同时支持多重注入和工厂方法?
Does Ninject support multi injection and factory methods simultaneously?
Ninject支持多重注入:
public class Samurai
{
public Samurai(IWeapon[] allWeapons)
{
var allWeapons = allWeapons;
}
}
它还支持自动生成工厂:
public class Samurai
{
public Samurai(Func<IWeapon> weaponFactory)
{
var weapon = weaponFactory.Invoke();
}
}
它无法同时处理这两个功能:
public class Samurai
{
public Samurai(Func<IWeapon>[] weaponFactories)
{
var weapons = weaponFactories.Select(factory => factory.Invoke());
}
}
结果:
Error activating IntPtr
No matching bindings are available, and the type is not self-bindable.
有什么办法可以做到这一点,还是我必须手动实施工厂?
将构造函数更改为:
public Samurai(IEnumerable<IWeapon> weaponFactories)
IEnumerables
每次迭代集合时都会产生一个新实例(以防生活方式是短暂的)。所以在某种意义上 IEnumerable
是工厂(它表现为流)。
Ninject支持多重注入:
public class Samurai
{
public Samurai(IWeapon[] allWeapons)
{
var allWeapons = allWeapons;
}
}
它还支持自动生成工厂:
public class Samurai
{
public Samurai(Func<IWeapon> weaponFactory)
{
var weapon = weaponFactory.Invoke();
}
}
它无法同时处理这两个功能:
public class Samurai
{
public Samurai(Func<IWeapon>[] weaponFactories)
{
var weapons = weaponFactories.Select(factory => factory.Invoke());
}
}
结果:
Error activating IntPtr
No matching bindings are available, and the type is not self-bindable.
有什么办法可以做到这一点,还是我必须手动实施工厂?
将构造函数更改为:
public Samurai(IEnumerable<IWeapon> weaponFactories)
IEnumerables
每次迭代集合时都会产生一个新实例(以防生活方式是短暂的)。所以在某种意义上 IEnumerable
是工厂(它表现为流)。