Я проводил тест, используя JOlivers CommonDomain и EventStore с NServiceBus. Мне нужно, чтобы вызвать событие в моей Совокупности так:Как использовать интерфейс как события в JOlivers CommonDomain и EventStore?
RaiseEvent(bus.CreateInstance<IPhoneNumberChanged>(m => { m.Number = number; }));
А потом у меня есть этот обработчик:
private void Apply(IPhoneNumberChanged phoneNumberChangedEvent)
{
this.Number = phoneNumberChangedEvent.Number;
}
К сожалению, это не работает. Я получаю исключение: «CommonDomain.Core.HandlerForDomainEventNotFoundException: Агрегат типа« Телефон »поднял событие типа« IPhoneNumberChanged », но не удалось найти обработчик для обработки сообщения».
Проблема заключается в том, что объект создан из «bus.CreateInstance», поскольку он работает с чистыми конкретными классами. Но мне нужны мои события как интерфейсы. Можно ли это решить?
EDIT: Просто примечание. Мне не нужно использовать «bus.CreateInstance», чтобы создать объект, это просто самый простой способ, который я в настоящее время должен поднять «IPhoneNumberChanged». Любой другой способ также был бы велик - до тех пор, пока у меня есть интерфейс в качестве аргумента в обработчике.
Привет, Джонатан, к сожалению, он не работает. Я отлаживал его, и, хотя имя такое же (IPhoneNumberChanged), Type не является. Тип, построенный из Bus.CreateInstance, это «MyDomain .__ Impl.IPhoneNumberChanged», а зарегистрированный тип - «MyDomain.IPhoneNumberChanged». А поскольку «MyDomain__Impl.IPhoneNumberChanged» создается только во время выполнения, я не могу зарегистрировать его в CommonDomain. Какие-нибудь советы? – Werner
Я думаю, что «this.Register (Type, action)» в основном, что я ищу? Или есть другое решение? – Werner
Во-вторых, забудьте мой последний комментарий. Такая регистрация должна выполняться каждый раз, когда создается объект события. – Werner