c# - 使用 Ninject 工厂方法将 IEnumerable 注入(inject)构造函数

标签 c# dependency-injection ninject

我正在尝试使用 Ninject 将 IEnumerable 注入(inject)到构造函数中。

我的构造函数如下所示:

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 只是从不使用绑定(bind),传递给构造函数的值基本上只是一个空的默认值。

如何使用 Ninject 注入(inject) IEnumerable

编辑

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

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 循环一次绑定(bind)一个 View 模型:

foreach (var fooViewModel in GetFooViewModels())
{
    Bind<FooViewModel>().ToConstant(fooViewModel);
}

最佳答案

Ninject 对枚举的处理方式不同。只需为所有 View 模型提供绑定(bind)。对于枚举,Ninject 将创建每个应用绑定(bind)的实例并将它们作为 IEnumerable 传递。

例如

Bind<FooViewModel>().To<FooViewModel1>();
Bind<FooViewModel>().To<FooViewModel2>();

关于c# - 使用 Ninject 工厂方法将 IEnumerable 注入(inject)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816769/

相关文章:

c# - 我的 Azure DocumentDB 文档类是否应该继承自 Microsoft.Azure.Documents.Document?

c# - CaSTLe 3.0 如何删除组件?

java - 如何在使用spring自动布线时传递构造函数参数?

c# - 如何配置 Ninject 以注入(inject) NodaTime IClock

ninject - Ninject 2 中的上下文变量

c# - 在 winforms 中使用按钮移动水平滚动条或列表框

c# - 将后台工作人员的数量限制为两个,并在添加时完成工作

c# - 固件 : Unexpected result upon unnamed registration of the same mapTo with different mapFrom with injectedProperties

PHP/MySQL : Database class and dependency injection

Ninject 拦截扩展 (AOP) - 好的工作示例/教程?