Прошло много времени с тех пор, как вопрос был задан, поэтому я не уверен, была ли проблема решена, но вот один из способов, которым вы можете сделать это с помощью Bus.Subscribe (хотя, как говорили другие респонденты, это не так предписанный способ сделать это NServiceBus)
Подписаться на тип сообщения с использованием перегрузки подписки
void Subscribe(Type messageType, Predicate<IMessage> condition);
Тогда вы можете обработать сообщение в делегате
private bool Handle(NServiceBus.IMessage nsbMsg)
{
//you get the message instance that you can handle
//return true
}
Итак, ваш код будет
class MySubscriber
{
public IBus Bus {get; set;}
public void Subscribe()
{
Bus.Subscribe(typeof(MyMessage), Handle);
}
public void Handle(NServiceBus.IMessage nsbMsg)
{
var msg = nsbMsg as MyMessage;
//your code
return true;
}
}
Однако обратите внимание, что, выполняя это, вы должны сами управлять временем жизни обработчика, которое в противном случае управлялось бы для вас NServiceBus с использованием инфраструктуры IOC по вашему выбору.
Вы также должны будете явно передать ссылку на IBus, которая будет автоматически введена для вас, если вы только внедряете интерфейс IHandleMessage.
Архитектурный момент здесь заключается в том, что NSB является полноценным «ESB», а не просто уровнем обмена сообщениями. Добавление другого слоя поверх вашего ESB - ИМХО слишком много абстракции.