Да, это также будет работать с агрегатором событий Prism. Все сводится к сравнению делегатов на равенство в обоих примерах. Обращение к делегату внутри анонимного метода не указывает c агрегатору событий.
Однако вы должны знать, что при использовании анонимных методов для такого типа одноразовой обработки событий работает, потому что вы удерживаете экземпляр делегата handler
или subscriber
, подписка на анонимные методы и отмена подписки на них может быть довольно сложной задачей в более сложном сценарии ios. Вам следует взглянуть на эти два вопроса, чтобы понять, как работает сравнение делегатов для анонимных методов.
В качестве альтернативы использованию анонимного метода вы можете использовать методы экземпляра или локальные функции которые были введены в C# 7.0 , как в следующем примере.
private void AddEventHandler()
{
// Local method to replace your anonymous method
void DoStuffAndUnsubscribe()
{
DoStuff();
eventAggregator.GetEvent<SomeEvent>().Unsubscribe(DoStuffAndUnsubscribe);
}
eventAggregator.GetEvent<SomeEvent>().Subscribe(DoStuffAndUnsubscribe);
}
Как отметил @Haukinger, наиболее кратким способом является захват экземпляра токена подписки событие анонимного метода для отказа от подписки с использованием Dispose()
.
IDisposable subscriptionToken = null;
subscriptionToken = eventAggregator.GetEvent<SomeEvent>().Subscribe(() =>
{
DoStuff();
subscriptionToken.Dispose();
});