我有一个消息传递上下文对象,定义为每个传入消息处理都是唯一的:
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类型打算在子容器中使用。