【问题标题】:NServiceBus Ninject could not find the NinjectObjectBuilder scope when using ToMethodNServiceBus Ninject 在使用 ToMethod 时找不到 NinjectObjectBuilder 范围
【发布时间】:2018-09-01 12:52:12
【问题描述】:

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

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
  • 忍者 3.2.2

【问题讨论】:

    标签: c# ninject nservicebus


    【解决方案1】:

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

    与此同时,您可以将您的 MessagingContext 注册更改为:

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

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

    【讨论】:

    • 作为一种解决方法,我在内核对象上使用了 GetContextPreservingResolutionRoot 扩展方法,但我不知道这是否是最好的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多