Я пытаюсь использовать EasyNetQ с Ninject для регистрации сообщений.Использование Ninject с обработчиками сообщений EasyNetQ/RabbitMQ
Мне удалось установить Ninject как EasyNetQ DI (я думаю), но когда сообщение приходит к обработчику без конструктора без параметров (например, мне нужна привязка репозитория там), он не разрешается. Или, по крайней мере, я считаю, что это проблема, так как я получаю довольно общую ошибку на консоли.
Я говорю EasyNetQ использовать Ninject так:
RabbitHutch.SetContainerFactory(() => new NinjectAdapter(container));
Я думаю, что это все, что мне нужно, чтобы установить его. Адаптер Ninject - один из EasyNetQ.
Мой обработчик выглядит следующим образом:
public class ProfileDeactivatedUpdateHandler : IConsume<ProfileDeactivatedUpdate>
{
private readonly IProfileRepository _profileRepository;
public ProfileDeactivatedUpdateHandler(IProfileRepository profileRepository)
{
_profileRepository = profileRepository;
}
public void Consume(ProfileDeactivatedUpdate message)
{
//Do Stuff.
}
}
Если добавить конструктор без параметров, и вместо установки Ninject быть доступны через ServiceLocator (Уф), то она работает. Обработчик называется штрафом, и я могу найти свой репозиторий через ServiceLocator, поэтому я знаю, что по крайней мере Ninject знает о репозитории.
Ошибка, возникающая при попытке обработать сообщение.
System.AggregateException: One or more errors occurred. ---> System.Exception: E
xception of type 'System.Exception' was thrown.
at EasyNetQ.ReflectionHelpers.DefaultFactories`1.Get()
at EasyNetQ.ReflectionHelpers.CreateInstance[T]()
at EasyNetQ.AutoSubscribe.DefaultAutoSubscriberMessageDispatcher.Dispatch[TMe
ssage,TConsumer](TMessage message)
at EasyNetQ.RabbitBus.<>c__DisplayClass6`1.<Subscribe>b__5(T msg)
--- End of inner exception stack trace ---
---> (Inner Exception #0) System.Exception: Exception of type 'System.Exception'
was thrown.
at EasyNetQ.ReflectionHelpers.DefaultFactories`1.Get()
at EasyNetQ.ReflectionHelpers.CreateInstance[T]()
at EasyNetQ.AutoSubscribe.DefaultAutoSubscriberMessageDispatcher.Dispatch[TMe
ssage,TConsumer](TMessage message)
at EasyNetQ.RabbitBus.<>c__DisplayClass6`1.<Subscribe>b__5(T msg)<---
Спасибо, что вернулись, чтобы ответить на вопрос. Запрос на утяжеление слился! –