c# - 每次我必须订阅事件时获取事件聚合器的实例?
问题描述
我有三个 WPF 应用程序必须订阅的事件。每次我必须订阅事件时是否需要获取事件聚合器的实例?
这是我现在的做法:
IEventAggregator eventAggregator = new EventAggregator();
eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
eventAggregator.GetEvent<IncidentInfoReadyEvent>().Subscribe(OnIncidentInfoReady);
eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
eventAggregator.GetEvent<IncidentInfoReadyEvent2>().Subscribe(OnIncidentInfoReady2);
eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
eventAggregator.GetEvent<ArrestInfoReadyEvent>().Subscribe(OnArrestInfoReady);
我可以这样做吗:
IEventAggregator eventAggregator = new EventAggregator();
eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
eventAggregator.GetEvent<IncidentInfoReadyEvent>().Subscribe(OnIncidentInfoReady);
eventAggregator.GetEvent<IncidentInfoReadyEvent2>().Subscribe(OnIncidentInfoReady2);
eventAggregator.GetEvent<ArrestInfoReadyEvent>().Subscribe(OnArrestInfoReady);
解决方案
You just need to do dependency injection in your class.
public class MainViewModel : ViewModelBase
{
private readonly IEventAggregator _eventAggregator;
public MainViewModel(IEventAggregator eventAggreator)
{
_eventAggregator = eventAggregator;
_eventAggregator.GetEvent<MyEventOne>().Subscribe(() => DoSomething());
_eventAggregator.GetEvent<MyEventTwo>().Subscribe(() => DoSomething());
_eventAggregator.GetEvent<MyEventThree>().Subscribe(() => DoSomething());
}
}
There is no need to take a new instance each time. But you should register logger in container as singleton.
推荐阅读
- html - 我的投资组合的响应能力问题
- salesforce - Salesforce 公式逻辑
- ios - 如何在 Swift 中将 UITextField 中的数据用作数组?
- blockchain - Electrum 服务器方法:“blockchain.scripthash.subscribe”
- bash - 如何打印代理并将其添加到服务器?
- bash - 带有时间戳的批处理间隔屏幕截图
- css - CSS 在服务器上的 django site-admin 中不起作用
- laravel-5.8 - ReferenceError:未定义显示框
- spring - 本地主机 Cookie 域
- bash - 如何在单个 shell 脚本中执行更改目录并并行执行两个程序?