我試圖用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
真:)肯定有多種有效的解決方案... –