【问题标题】:Bind a collection to Ninject将集合绑定到 Ninject
【发布时间】:2013-09-22 17:58:43
【问题描述】:

在使用 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 中绑定一些类的集合是个好主意吗?这会导致任何意想不到的问题吗?

【问题讨论】:

  • IsInDesignModeStatic 嗯? 静态?您实际上并没有在静态方法名称中添加“静态”一词来表明它是静态的,对吗?
  • 这是 MVVM Light 属性
  • 哎呀。我的意思是,说真的,呃。

标签: c# wpf mvvm collections ninject


【解决方案1】:

我真的不觉得那太脏了。这一切都保存在引导程序中,所以很容易去那里看看行为是什么。您将所有控制状态隐藏在地毯下,以保持代码其他部分的整洁。

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2012-12-31
    相关资源
    最近更新 更多