Prism WPF中接口名称的依赖解析
我需要在应用程序的不同页面之间共享3个ZmqService实例。为此,我已使用单独的名称注册了IZmqService接口,如下所示:-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());
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"))
)
);