我目前正在使用Mvvm Light的IoC容器解决以下问题-我有一个接口IDataService,该接口由两个类实现:DataService1DataService2。我也有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无法解析-如果我想解析键控的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");

09-11 20:37