【发布时间】:2013-08-16 14:43:09
【问题描述】:
我正在使用 MVVM Light,我目前正在使用该软件包附带的 SimpleIoC。我对依赖注入有点卡住了。我有一堆要在我的视图模型中使用的服务,但是大多数窗口都是列表编辑范例,即一个屏幕列出了所有Person 类型,然后您可以通过新的添加或编辑Person屏幕。
当我在代码后面做所有代码时,我添加和编辑记录的代码如下:
查看
private void btnEdit_Click(object sender, RoutedEventArgs e)
{
_viewModel.Edit();
}
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
_viewModel.Add();
}
查看模型
public void Add()
{
var f = new TypeDetails();
f.Show();
}
public void Edit()
{
if (SelectedItem == null)
return;
var f = new TypeDetails(SelectedItem.Id);
f.Show();
}
TypeDetails的构造函数如下:
public TypeDetails(int id = 0)
{
InitializeComponent();
_viewModel = new TypeDetailsViewModel(id);
DataContext = _viewModel;
}
用 MVVM Light 实现这种类型功能的最佳方法是什么?我一直在为列表屏幕使用ViewModelLocator 类,但是我看不到使用 SimpleIoC 的方法。到目前为止,我的方法是保持构造函数不变,直到我需要将依赖项注入到 TypeDetailsViewModel 中,例如服务。对于服务,TypeDetailsViewModel 的构造函数将是:
public TypeDetailsViewModel(ISomeService someService, int id = 0)
{
...
}
但这意味着在我的视图构造函数中,我必须一次构建这些依赖项并手动注入它们......
public TypeDetails(int id = 0)
{
InitializeComponent();
_viewModel = new TypeDetailsViewModel(SimpleIoC.Current.GetInstance<ISomeService>(),id);
DataContext = _viewModel;
}
有没有更好的方法来做到这一点?
【问题讨论】:
标签: c# wpf mvvm mvvm-light