我目前正在努力解决来自Mvvm Light的IoC容器的问题 - 我有一个接口IDataService
,它由两个类实现:DataService1
和DataService2
。我还有MainViewModel
类,它有很多依赖项,其中一个是IDataService
。
关键是,我想提供MainViewModel
DataService2
,而不是另一个。{1}}。我怎样才能做到这一点?我试图“锁定”IDataService
和MainViewModel
的两个实例,就像那样:
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
,除了那个。
我该怎么做?我显然遗漏了一些东西。提前感谢您的帮助。
答案 0 :(得分:2)
讨厌说,但它看起来是唯一的方式。您必须注册一个键控工厂:
SimpleIoc.Default.Register<MainViewModel>(() => new MainViewModel(new X(), new Y(), new Z(), new M(), new N(), SimpleIoc.Default.GetInstance<IDataService>("B")), "B");