我正在使用 Caliburn 和 C#,但我觉得这是一个通用的 MVVM/DI 问题。
假设我有一个视图模型 NoteViewModel,它传递了一个名为 Note 的模型对象。
这是一些代码:
class NoteViewModel : PropertyChangedBase
{
private readonly Note _note;
public NoteViewModel(Note note)
{
_note = note;
}
public string Title
{
get { return _note.Title; }
set { _note.Title = value; NotifyOfPropertyChange(() => Title); }
}
}
现在这个对象是通过调用 new() 并传递一个模型对象来创建的。
好吧,这很好用,但是现在我需要添加一个方法,该方法需要从我的 DI 容器中导入一个类。
那么我是否只是调用 ServiceLocator.Current.GetInstance() 来获取它?或者我应该设计这个视图模型以通过 DI 容器创建并以某种方式设置传递 Note 对象的方法?
设计此视图模型的正确方法是什么?基本上是一个“PerInstance”视图模型,它需要一个模型对象才能使用。Caliburn 是否有内置方法来执行此操作?