Хотел бы поделиться самописной системой управления событиями.
Код можно глянуть тут: github.com/AlexSolari/eve
Работа с библиотекой происходит через класс EventHandler.
Просто создайте инстанс и храните его где вам удобно (желательно в DI контейнере, или в синглтоне если вы поехавший)
Чтобы создать событие, создайте класс, который реализует либо IContextfulEvent, либо IContextlessEvent для событий с контекстом и без соответственно.
Если вы хотите, чтобы иметь доступ к контексту в обработчике события, вам нужно реализовать IContextfulEvent и создать класс контекста, который будет реализовывать IEventContext.
Пример:
    class Event : IContextfulEvent {}

    class EventContext: IEventContext<Event>
    {
        public int MyData = 42;
    }
Для подписки на событие используется метод EventHandler.Subscribe.
Можно юзать двумя способами: с классом, реализующим интерфейс ISubscription, и с анонимным методом:
    ISubscription<Event, EventContext> subscription = new MySubscription();
    handler.Subscribe(subscription);

    handler.Subscribe<Event, EventContext>(ctx => {});
Метод EventHandler.Subscribe возвращает ISubscription, поэтому при необходимости вы можете использовать его позже с методом EventHandler.Unsubscribe.
Чтобы запустить событие, вам нужно использовать метод EventHandler.Dispatch.
Пример:
    handler.Dispatch<ContextlessEvent>();
    handler.Dispatch<ContextfulEvent, Context>(new Context ());
Спасибо за внимание, с радостью почитаю ваши комменты и отзывы.
`
ОЖИДАНИЕ РЕКЛАМЫ...