Вот быстрый и грязный метод, который может заставить вас задуматься: статический общий класс, который вы можете определить в своей общей сборке.
public static class SharedEvents
{
public delegate void FirstEventHandler();
public delegate void SecondEventHandler();
public static event FirstEventHandler FirstEvent;
public static event FirstEventHandler SecondEvent;
public static void OnFirstEvent()
{
if (FirstEvent != null) FirstEvent();
}
public static void OnSecondEvent()
{
if (!SecondEvent != null) SecondEvent();
}
}
Один регистр для обработки FirstEvent
, другой для обработки SecondEvent
: для вызова друг друга, соответственно, OnFirstEvent()
или OnSecondEvent()
.
Это простая и довольно скудная реализация шаблона Mediator:
http://en.wikipedia.org/wiki/Mediator_pattern
С помощью внедрения зависимостей вы также можете получить экземпляр объекта на основе общего интерфейса. Например, в Ninject вы можете зарегистрировать обработчик для IFirst
, который будет константой (конкретный экземпляр чего-то, что реализует IFirst
), и наоборот. Затем позвоните Get<IFirst>
, чтобы взять его.