Я пытаюсь использовать EasyNetQ с Ninject для записи сообщений.
Мне удалось настроить 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 (Ugh), то он заработает. Обработчик называется нормально, и я могу найти свой репозиторий через 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)<---