【发布时间】:2014-07-27 10:03:21
【问题描述】:
我目前正在努力解决来自 Mvvm Light 的 IoC 容器的以下问题 - 我有一个接口 IDataService,它由两个类实现:DataService1 和 DataService2。我还有 MainViewModel 类,它有很多依赖项,其中一个是 IDataService。
关键是,我想为MainViewModel 提供DataService2,而不是另一个。我怎样才能做到这一点?我尝试“键入”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 无法解决 - 据我所知,如果我想解决 keyed MainViewModel ("B"),所有它的依赖项必须被键入。这不是我想要的——我想解析具有默认依赖项的MainViewModel,除了那个。
我该怎么做?我显然错过了一些东西。提前感谢您的帮助。
【问题讨论】:
-
确切的异常消息是什么?
-
@RomanKo 我收到了 ActivationException。附加信息:在没有键的情况下在缓存中找不到类型:ViewModels.MainViewModel
标签: c# dependency-injection mvvm-light ioc-container