gpt4 book ai didi

c# - MVVMLight 中的 IoC 容器 - 如何将具体实现传递给指定的元素?

转载 作者:行者123 更新时间:2023-11-30 16:58:39 25 4
gpt4 key购买 nike

我目前正在努力解决来自 Mvvm Light 的 IoC 容器的以下问题 - 我有一个接口(interface) IDataService,它由两个类实现:DataService1数据服务2。我还有 MainViewModel 类,它有很多依赖项,其中一个是 IDataService

重点是,我想为 MainViewModel 提供 DataService2,而不是另一个。我怎样才能做到这一点?我尝试“键入”IDataServiceMainViewModel 的两个实例,就像这样:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com