我正在尝试使用 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/