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