Как использовать интерфейс как события в JOlivers CommonDomain и EventStore? - PullRequest
0 голосов
/ 02 сентября 2011

Я провожу тест с использованием JOlivers CommonDomain и EventStore с NServiceBus . Мне нужно поднять событие в моем Агрегате так:

RaiseEvent(bus.CreateInstance<IPhoneNumberChanged>(m => { m.Number = number; }));

А потом у меня есть этот обработчик:

private void Apply(IPhoneNumberChanged phoneNumberChangedEvent)
{
    this.Number = phoneNumberChangedEvent.Number;
}

К сожалению, это не работает. Я получаю исключение: «CommonDomain.Core.HandlerForDomainEventNotFoundException: агрегат типа« Phone »вызвал событие типа« IPhoneNumberChanged », но не удалось найти обработчик для обработки сообщения.».

Проблема здесь в том, что объект создан из "bus.CreateInstance", так как он работает с чисто конкретными классами. Но мне нужны мои события как интерфейсы. Можно ли это решить?

РЕДАКТИРОВАТЬ: просто примечание - мне не нужно использовать «bus.CreateInstance» для создания объекта, это просто самый простой (единственный) способ, которым я в настоящее время должен поднять «IPhoneNumberChanged». Любой другой способ также был бы полезен - только если у меня есть интерфейс в качестве аргумента в обработчике.

1 Ответ

2 голосов
/ 04 сентября 2011

В вашем конструкторе для агрегата телефона просто добавьте следующее:

this.Register<IPhoneNumberChanged>(this.Apply);

Это позаботится об исключении.Механизм внутренней маршрутизации по умолчанию внутри CommonDomain - это маршрутизатор на основе регистрации, который понимает, как передать событие в соответствующий метод Handle - и все это без использования отражения.Другой маршрутизатор был написан и уже является частью проекта CommonDomain, который использует рефлексию и основывается на соглашениях.

Одна быстрая мысль относительно названия вашего события.Вместо того, чтобы говорить, что номер телефона изменился, вы можете захотеть, чтобы событие указывало , почему номер телефона изменился.С точки зрения предметной области, почему-то всегда интереснее и важнее, чем что.Тот факт, что номер телефона изменился, обычно не интересен.Тот факт, что он изменился, потому что человек переместил или отменил свою учетную запись или что-то еще - это интересно и, вероятно, очень важно.

...