我试图用Ninject将IEnumerable
注入到构造函数中。使用Ninject工厂方法将IEnumerable注入到构造函数中
我的构造是这样的:
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不会使用绑定,并且传递给构造函数的值基本上只是一个空的默认值。
如何为Ninject注入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
基于圣雷莫的回答,一个可能的解决方案是使用foreach循环绑定一次查看一个模型:
foreach (var fooViewModel in GetFooViewModels())
{
Bind<FooViewModel>().ToConstant(fooViewModel);
}
我不知道收集支持或'ToMethod'这样工作。这应该可以工作:'绑定()。ToMethod(context => new MatrixViewModel(GetFooViewModels()))''。此外,您可以将自己的答案添加到您的问题,并接受它,如果雷莫的不是你想接受的水平,作为答案。 –
@Merlyn,这是一个很好的观点......只是“走上一个关卡”并绑定整个MatrixViewModel(我的真实视图模型有一些参数,所以绑定整个东西会有点麻烦)。至于为什么我没有把我的解决方案放入答案,我可以问你同样的事情关于你的评论:) – devuxer
真:)肯定有多种有效的解决方案... –