Я часто заканчиваю тем, что пишу функции SubscribeToEvents()
и UnsubscribeEvents()
, которые вызываются в моих установках свойств, когда свойство получает новое значение.Хотя код для этого достаточно прост, мне он не нужен, поскольку он в основном дублирует код (код тот же, за исключением +=
и -=
).
Я пытаюсь создать небольшойслужебный класс, который обрабатывает это, имея функцию AddSubscription(EventHandler, EventHandler)
и функцию UnsubscribeAll()
, которая очищает все подписки, зарегистрированные AddSubscription
:
public class EventSubscriber
{
private readonly List<KeyValuePair<EventHandler, EventHandler>> _subscriptions = new List<KeyValuePair<EventHandler, EventHandler>>();
public void AddSubscription(EventHandler toSubscribe, EventHandler subscriber)
{
toSubscribe += subscriber;
_subscriptions.Add(new KeyValuePair<EventHandler, EventHandler>(toSubscribe, subscriber));
}
public void UnsubscribeAll()
{
foreach (KeyValuePair<EventHandler, EventHandler> subscription in _subscriptions)
{
EventHandler toSubscribe = subscription.Key;
EventHandler subscriber = subscription.Value;
toSubscribe -= subscriber;
}
_subscriptions.Clear();
}
}
Однако мне не разрешено передавать события в AddSubscription()
:
EventSubscriber subscriber = new eventSubscriber();
subscriber.AddSubscription(_someControl.SomeEvent, OnSomeEvent);
Сбой при ошибке
Событие '....' может появляться только в левой части + = или - =
Можно ли как-нибудь избежать этого, или я лаю не на том дереве?