使用ToMethod时,NServiceBus Ninject无法找到NinjectObjectBuilder范围

时间:2018-03-22 22:41:05

标签: c# ninject nservicebus

我将消息传递上下文对象定义为每个传入消息处理唯一:

Bind<MessagingContext>().ToSelf().InUnitOfWorkScope();

我还注册了一个自定义界面,通过Ninject ToMethod扩展名动态解析:

Bind<IBus>().ToMethod(c =>
            {
                var messagingContext = c.Kernel.Get<MessagingContext>();
                return new Bus(messagingContext);
            });

目前,在解析MessagingContext对象实例时,我遇到了异常:

Ninject.Extensions.NamedScope.UnknownScopeException
  HResult=0x80131500
  Message=Error activating MessagingContext
The scope NinjectObjectBuilder is not known in the current context.
No matching scopes are available, and the type is declared InNamedScope(NinjectObjectBuilder).

有没有办法正确解析ToMethod中注册为InUnitOfWorkScope的对象?

我正在使用:

  • NServiceBus 6.4.2
  • NServiceBus.Ninject 6.0.1
  • Ninject 3.2.2

1 个答案:

答案 0 :(得分:0)

似乎这可能是子容器和命名范围的错误。

在此期间,您可以将MessagingContext注册更改为:

Bind<MessagingContext>().ToSelf().DefinesNamedScope("NinjectObjectBuilder");

至少让Ninject知道MessagingContext类型是否打算在子容器中使用。