Ninject で EasyNetQ を使用してメッセージを記録しようとしています。
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.
}
}
パラメーターなしのコンストラクターを追加し、代わりに ServiceLocator (Ugh) を介して Ninject を使用できるように設定すると、機能します。ハンドラーは正常に呼び出され、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)<---