将一个集合绑定到Ninject

时间:2013-09-22 17:58:44

标签: c# wpf mvvm collections ninject

在使用Ninject开发WPF应用程序时,我分析了一些在代码中只应存在一次的集合。

例如,主窗口包含项目选项卡的内部列表,类似于浏览器中的选项卡。主窗口的视图模型包含此属性ObservableCollection<ProjectViewModel> ...我的想法就像,嘿,只有一个只有一个ProjectViewModel的ObservableCollection。如果我用Ninject将这种类型绑定为单例,会发生什么?

所以我写了这样的东西......

if (ViewModelBase.IsInDesignModeStatic) //pure WPF design mode check looks
                                        //differently (this is MVVM Light)
{
    kernel.Bind<ObservableCollection<Project>>().ToMethod((c) =>
    {
        return new ObservableCollection<Project>() { new Project("Lorem", "Ipsum") }; 
    }
} 
else 
{
    kernel.Bind<ObservableCollection<Project>>()
          //.ToSelf() <-- ToSelf() does not work
          .ToMethod((c) => 
          {
              return new ObservableCollection<Project>();
          }).InSingletonScope();
}

它有效!在设计模式中,我实际上看到“Lorem”和“Ipsum”,并且在运行时,代码似乎按预期工作,主视图模型中的集合为空。代码看起来非常好看和可读。

但是我持怀疑态度和怀疑态度,我觉得我做的事情非常脏,因为我找不到任何类似代码的例子,其中一类类的集合被绑定到某个实现。但我可能没有足够的搜索。

在Ninject中绑定一些类的好主意吗?这会引起任何意想不到的问题吗?

1 个答案:

答案 0 :(得分:0)

我真的不觉得那太脏了。这一切都保存在引导程序中,因此很容易看到那里,看看行为是什么。你正在推动地毯下的所有控制状态,以便在代码的其他部分保持清洁。