c# – 使用Ninject工厂方法将IEnumerable注入到构造函数中

前端之家收集整理的这篇文章主要介绍了c# – 使用Ninject工厂方法将IEnumerable注入到构造函数中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图将一个IEnumerable注入到Ninject的构造函数中.

我的构造函数如下所示:

  1. public Matrixviewmodel(IEnumerable<Fooviewmodel> fooviewmodels)
  2. {
  3. _fooviewmodels = fooviewmodels;
  4. }

我的Ninject模块如下所示:

  1. public class MainModule : NinjectModule
  2. {
  3. public override void Load()
  4. {
  5. Bind<IEnumerable<Fooviewmodel>>()
  6. .ToMethod(context => GetFooviewmodels())
  7. .InSingletonScope(); // this binding is not working
  8. }
  9.  
  10. private IEnumerable<Fooviewmodel> GetFooviewmodels()
  11. {
  12. // returns a bunch of foo view models
  13. }
  14. }

这似乎没有工作.我没有任何错误. Ninject只是不使用绑定,并且传递给构造函数的值基本上只是一个空的默认值.

如何注册一个IEnumerable与Ninject?

编辑

关于我工厂方法的更多细节:

  1. private IEnumerable<Fooviewmodel> GetFooviewmodels()
  2. {
  3. return new[]
  4. {
  5. new Fooviewmodel
  6. {
  7. Bar = new Barviewmodel
  8. {
  9. X = 1,Y = 2
  10. },Misc = "Hello"
  11. },new Fooviewmodel
  12. {
  13. Bar = new Barviewmodel
  14. {
  15. X = 3,Y = 4
  16. },Misc = "Goodbye"
  17. },// etc.....
  18. };
  19. }

编辑2

基于Remo的答案,一个可能的解决方案是使用foreach循环来一次绑定视图模型:

  1. foreach (var fooviewmodel in GetFooviewmodels())
  2. {
  3. Bind<Fooviewmodel>().ToConstant(fooviewmodel);
  4. }

解决方法

Ninject的枚举被不同的对待.只需提供所有视图模型的绑定.对于枚举Ninject将创建一个应用绑定的实例,并将其作为IEnumerable传递.

例如

  1. Bind<Fooviewmodel>().To<Fooviewmodel1>();
  2. Bind<Fooviewmodel>().To<Fooviewmodel2>();

猜你在找的C#相关文章