作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在努力解决来自 Mvvm Light 的 IoC 容器的以下问题 - 我有一个接口(interface) IDataService
,它由两个类实现:DataService1
和 数据服务2
。我还有 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
,除了那个。
我该怎么做?我显然错过了一些东西。在此先感谢您的帮助。
最佳答案
不想说,但它看起来是唯一的方法。您必须注册一个键控工厂:
SimpleIoc.Default.Register<MainViewModel>(() => new MainViewModel(new X(), new Y(), new Z(), new M(), new N(), SimpleIoc.Default.GetInstance<IDataService>("B")), "B");
关于c# - MVVMLight 中的 IoC 容器 - 如何将具体实现传递给指定的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24979857/
我是一名优秀的程序员,十分优秀!