Получать экземпляр агрегатора событий каждый раз, когда мне нужно подписаться на событие? - PullRequest
0 голосов
/ 16 октября 2019

У меня есть три события, на которые приложение 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);

1 Ответ

2 голосов
/ 20 октября 2019

Вам просто нужно внедрить зависимости в вашем классе.

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());
    }
}

Нет необходимости каждый раз создавать новый экземпляр. Но вы должны зарегистрировать регистратор в контейнере как синглтон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...