我目前在使用Mvvm Light的IoC容器时遇到了一个问题 - 我有一个接口
问题是,我想为
IDataService
,由两个类实现:DataService1
和DataService2
。我还有一个MainViewModel
类,它有许多依赖项,其中一个是IDataService
。问题是,我想为
MainViewModel
提供DataService2
而不是另一个。我尝试给IDataService
和MainViewModel
的两个实例都设置“key”来达到这个目的,就像这样:class MainViewModel
{
// MainViewModel has many dependencies,
public MainViewModel(X x, Y y, Z z, M m, N n, IDataService dataService) { }
}
(...)
SimpleIoc.Default.Register<IDataService>(() => new DataService1(), "A");
SimpleIoc.Default.Register<IDataService>(() => new DataService2(), "B");
(...)
var viewModel = SimpleIoc.Default.GetInstance<MainViewModel>("B"); // Runtime exception
但是我遇到了运行时异常,提示无法解析MainViewModel
- 换句话说,如果我想要解析带有键控的MainViewModel
("B"),那么它所有的依赖项都必须是键控的。这不是我想要的 - 我想要解析具有默认依赖项的MainViewModel
,除了其中一个依赖项。
我应该怎么做?显然我漏掉了一些东西。谢谢您提前的帮助。