我试图将一个IEnumerable注入到Ninject的构造函数中.
我的构造函数如下所示:
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只是不使用绑定,并且传递给构造函数的值基本上只是一个空的默认值.
如何注册一个IEnumerable与Ninject?
编辑
关于我工厂方法的更多细节:
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循环来一次绑定视图模型:
foreach (var fooviewmodel in GetFooviewmodels())
{
Bind<Fooviewmodel>().ToConstant(fooviewmodel);
}
解决方法
Ninject的枚举被不同的对待.只需提供所有视图模型的绑定.对于枚举Ninject将创建一个应用绑定的实例,并将其作为IEnumerable传递.
例如
Bind<Fooviewmodel>().To<Fooviewmodel1>(); Bind<Fooviewmodel>().To<Fooviewmodel2>();