Prism WPF中接口名称的依赖解析

Prism WPF中接口名称的依赖解析,wpf,mvvm,dependencies,unity-container,prism,Wpf,Mvvm,Dependencies,Unity Container,Prism,我需要在应用程序的不同页面之间共享3个ZmqService实例。为此,我已使用单独的名称注册了IZmqService接口,如下所示:- container.RegisterInstance<IZmqService>("liveViewCaptureService", new ZmqService()); container.RegisterInstance<IZmqService>("faceMatchCaptureService", new ZmqService());

我需要在应用程序的不同页面之间共享3个ZmqService实例。为此,我已使用单独的名称注册了IZmqService接口,如下所示:-

container.RegisterInstance<IZmqService>("liveViewCaptureService", new ZmqService());
container.RegisterInstance<IZmqService>("faceMatchCaptureService", new ZmqService());
container.RegisterInstance<IZmqService>("captureServiceTrigger", new ZmqService());
如果我尝试解析App.xaml.cs中的ViewModel,如下所示

IManualVerificationPageViewModel vm = container.Resolve<IManualVerificationPageViewModel>();
如果我正在注册一种类型的IZmqService,则AutoWire可以正常工作,如下所示:-

IZmqService liveViewCaptureService = container.Resolve<IZmqService>("liveViewCaptureService");
IZmqService faceMatchCaptureService = container.Resolve<IZmqService>("faceMatchCaptureService");
IZmqService captureServiceTrigger = container.Resolve<IZmqService>("captureServiceTrigger");

container.RegisterType<IManualVerificationPageViewModel, ManualVerificationPageViewModel>(
               new PerResolveLifetimeManager(),
               new InjectionConstructor(
                   new InjectionParameter<IRegionManager>(container.Resolve<IRegionManager>()),
                   new InjectionParameter<IEventAggregator>(container.Resolve<IEventAggregator>()),
                   new InjectionParameter<IDialogService>(container.Resolve<IDialogService>()),
                   new InjectionParameter<ICaptureService>(container.Resolve<ICaptureService>()),
                   new InjectionParameter<IAppConfiguration>(container.Resolve<IAppConfiguration>()),
                   new InjectionParameter<IMessageQueueService>(container.Resolve<IMessageQueueService>()),
                   new InjectionParameter(liveViewCaptureService),
                   new InjectionParameter(faceMatchCaptureService)
                   )
               );
IZmqService liveViewCaptureService = container.Resolve<IZmqService>("liveViewCaptureService");
IZmqService faceMatchCaptureService = container.Resolve<IZmqService>("faceMatchCaptureService");
IZmqService captureServiceTrigger = container.Resolve<IZmqService>("captureServiceTrigger");

container.RegisterType<IZmqService, ZmqService>(new InjectionConstructor());
但这会为每个构造函数参数创建一个新的IZmqService实例,而不是使用注册的类型


我做错了什么?

好的。我下定决心了

我所做的是向视图模型注册我的接口,而AutoWireViewModel和接口之间没有链接

我所要做的就是将其更改为:-

container.RegisterType<ManualVerificationPageViewModel>(
                   new PerResolveLifetimeManager(),
                   new InjectionConstructor(
                       new InjectionParameter<IRegionManager>(container.Resolve<IRegionManager>()),
                       new InjectionParameter<IEventAggregator>(container.Resolve<IEventAggregator>()),
                       new InjectionParameter<IDialogService>(container.Resolve<IDialogService>()),
                       new InjectionParameter<ICaptureService>(container.Resolve<ICaptureService>()),
                       new InjectionParameter<IAppConfiguration>(container.Resolve<IAppConfiguration>()),
                       new InjectionParameter<IMessageQueueService>(container.Resolve<IMessageQueueService>()),
                       new InjectionParameter(container.Resolve<IZmqService>("liveViewCaptureService")),
                       new InjectionParameter(container.Resolve<IZmqService>("faceMatchCaptureService"))
                       )
                   );
而且效果很好。我仍然在寻找如何将界面、视图和视图模型链接在一起。我一发现就会发帖

IZmqService liveViewCaptureService = container.Resolve<IZmqService>("liveViewCaptureService");
IZmqService faceMatchCaptureService = container.Resolve<IZmqService>("faceMatchCaptureService");
IZmqService captureServiceTrigger = container.Resolve<IZmqService>("captureServiceTrigger");

container.RegisterType<IZmqService, ZmqService>(new InjectionConstructor());
container.RegisterType<ManualVerificationPageViewModel>(
                   new PerResolveLifetimeManager(),
                   new InjectionConstructor(
                       new InjectionParameter<IRegionManager>(container.Resolve<IRegionManager>()),
                       new InjectionParameter<IEventAggregator>(container.Resolve<IEventAggregator>()),
                       new InjectionParameter<IDialogService>(container.Resolve<IDialogService>()),
                       new InjectionParameter<ICaptureService>(container.Resolve<ICaptureService>()),
                       new InjectionParameter<IAppConfiguration>(container.Resolve<IAppConfiguration>()),
                       new InjectionParameter<IMessageQueueService>(container.Resolve<IMessageQueueService>()),
                       new InjectionParameter(container.Resolve<IZmqService>("liveViewCaptureService")),
                       new InjectionParameter(container.Resolve<IZmqService>("faceMatchCaptureService"))
                       )
                   );