c# – 使用Ninject工厂方法将IEnumerable注入到构造函数中
发布时间:2020-12-15 17:42:24 所属栏目:百科 来源:网络整理
导读:我试图将一个IEnumerable注入到Ninject的构造函数中. 我的构造函数如下所示: public MatrixViewModel(IEnumerableFooViewModel fooViewModels){ _fooViewModels = fooViewModels;} 我的Ninject模块如下所示: public class MainModule : NinjectModule{ pub
我试图将一个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>(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |