加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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>();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读