我有一个消息传递上下文对象,定义为每个传入消息处理都是唯一的:

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

最佳答案

似乎这可能是子容器和命名作用域的错误。

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

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


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

10-02 03:07