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 是工厂(它表现为流)。