dev*_*xer 9 c# dependency-injection ninject
我正在尝试IEnumerable使用Ninject 注入构造函数.
我的构造函数看起来像这样:
public MatrixViewModel(IEnumerable<FooViewModel> fooViewModels)
{
_fooViewModels = fooViewModels;
}
Run Code Online (Sandbox Code Playgroud)
我的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
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用.我没有得到任何错误.Ninject只是不使用绑定,传递给构造函数的值基本上只是一个空的默认值.
你如何注射IEnumerableNinject?
编辑
关于我工厂方法的更多细节:
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.....
};
}
Run Code Online (Sandbox Code Playgroud)
编辑2
基于Remo的答案,一种可能的解决方案是使用foreach循环一次绑定一个视图模型:
foreach (var fooViewModel in GetFooViewModels())
{
Bind<FooViewModel>().ToConstant(fooViewModel);
}
Run Code Online (Sandbox Code Playgroud)
Rem*_*oor 15
Ninject对可枚举的处理方式不同.只需为所有视图模型提供绑定.对于枚举,Ninject将创建每个应用绑定的实例并将其作为传递IEnumerable.
例如
Bind<FooViewModel>().To<FooViewModel1>();
Bind<FooViewModel>().To<FooViewModel2>();
Run Code Online (Sandbox Code Playgroud)
基于Remo的答案,一种可能的解决方案是使用foreach循环一次绑定一个视图模型:
foreach (var fooViewModel in GetFooViewModels())
{
Bind<FooViewModel>().ToConstant(fooViewModel);
}
Run Code Online (Sandbox Code Playgroud)