我们的新项目始于使用ViewModelLocator与ViewModel结合视图的View第一个模式。从视图优先改变为视图模型优先 - 我如何处理构造函数依赖注入
我想更改为ViewModel的第一个模式。
这里是我的视图模型构造:
public DeviceSelectionViewModel(IDataModel dataModel, IMessenger messenger)
{
if (dataModel == null) throw new ArgumentNullException("dataModel");
if (messenger == null) throw new ArgumentNullException("messenger");
Selector = new PlantDataTemplateSelector();
PlantSelector = new PlantNodesSelector();
Plants = new List<Plant>(0);
messenger = messenger;
messenger.Register<PlantDataLoadedMessage>(this, m => DispatcherHelper.CheckBeginInvokeOnUI(() => OnPlantDataLoaded(m.Plants)));
RefreshData(_dataModel);
}
下面是我现在首先用视图模型选择适当的视图模型。
public class MainViewModel : Module
{
public MainViewModel()
{
SelectedView = new DeviceSelectionViewModel();
}
public ViewModelBase SelectedView { get; set; }
}
随着视图第一,我从来没有直接通过代码直接调用ViewModel,所以构造函数依赖注入工作正常。
现在我通过控制器ViewModel调用ViewModel,它需要ViewModel构造函数的2个参数。
在这里适当的玩法是在控制器视图模型中保存引用并将它们传递给构造函数?在这种情况下,我错过了一些关于DI如何工作的内容?
我仍与DI(Ninject)和MVVM把拼在一起,所以要那种:)
我得到的第一个选择,但我无法绕过第二个选择。你能好好谈谈那一点吗? – faldeland
@faldeland我更新了我的答案 –
此信息非常有帮助。我希望尽可能遵循最佳做法。我正在寻找一种可靠的方式来通过MainViewModel进行导航。我相信我会像你一样深入到底。我希望我能找到一个有这些实践的开源项目。 – faldeland