c# – 使用Ninject工厂方法将IEnumerable注入到构造函数中

前端之家收集整理的这篇文章主要介绍了c# – 使用Ninject工厂方法将IEnumerable注入到构造函数中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图将一个IEnumerable注入到Ninject的构造函数中.

我的构造函数如下所示:

public Matrixviewmodel(IEnumerable<Fooviewmodel> fooviewmodels)
{
    _fooviewmodels = fooviewmodels;
}

我的Ninject模块如下所示:

public class MainModule : NinjectModule
{
    public override void Load()
    {
        Bind<IEnumerable<Fooviewmodel>>()
            .ToMethod(context => GetFooviewmodels())
            .InSingletonScope(); // this binding is not working
    }

    private IEnumerable<Fooviewmodel> GetFooviewmodels()
    {
        // returns a bunch of foo view models
    }
}

这似乎没有工作.我没有任何错误. Ninject只是不使用绑定,并且传递给构造函数的值基本上只是一个空的默认值.

如何注册一个IEnumerable与Ninject?

编辑

关于我工厂方法的更多细节:

private IEnumerable<Fooviewmodel> GetFooviewmodels()
{
    return new[]
    {
        new Fooviewmodel
        {
            Bar = new Barviewmodel
            {
                X = 1,Y = 2
            },Misc = "Hello"
        },new Fooviewmodel
        {
            Bar = new Barviewmodel
            {
                X = 3,Y = 4
            },Misc = "Goodbye"
        },// etc.....
    };
}

编辑2

基于Remo的答案,一个可能的解决方案是使用foreach循环来一次绑定视图模型:

foreach (var fooviewmodel in GetFooviewmodels())
{
    Bind<Fooviewmodel>().ToConstant(fooviewmodel);
}

解决方法

Ninject的枚举被不同的对待.只需提供所有视图模型的绑定.对于枚举Ninject将创建一个应用绑定的实例,并将其作为IEnumerable传递.

例如

Bind<Fooviewmodel>().To<Fooviewmodel1>();
Bind<Fooviewmodel>().To<Fooviewmodel2>();

猜你在找的C#相关文章