C# 在WebApi应用程序中使用Ninject注入NServiceBus

C# 在WebApi应用程序中使用Ninject注入NServiceBus,c#,ninject,nservicebus,asp.net-web-api,C#,Ninject,Nservicebus,Asp.net Web Api,我正在尝试从我的WebApi应用程序向队列发送消息。 服务器第一次启动时一切正常,我可以从控制器向队列发送消息,但下一次调用该操作时会引发以下异常: Cannot access a disposed object. Object name: 'UnicastBus'. 这就是我绑定IBus接口的方式 public static class NinjectWebCommon { ... private static void RegisterServices(IKernel ke

我正在尝试从我的WebApi应用程序向队列发送消息。 服务器第一次启动时一切正常,我可以从控制器向队列发送消息,但下一次调用该操作时会引发以下异常:

Cannot access a disposed object.
Object name: 'UnicastBus'.
这就是我绑定IBus接口的方式

public static class NinjectWebCommon
{
    ...
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IBus>().ToConstant(CreateBus()).InSingletonScope();
    }

    private static IBus CreateBus()
    {
        Configure.Serialization.Xml();
        return Configure.With()
           .DefaultBuilder()
           .UseTransport<Msmq>()
           .UnicastBus()
           .SendOnly();
    }
}
对这个错误有什么想法吗


谢谢

我将de代码更改为使用NinjectBuilder

在我使用的RegisterServices方法中:

Configure.Serialization.Xml();
      Configure.Transactions.Disable();
      Configure.With()
      .NinjectBuilder(kernel)
      .UseTransport<Msmq>()
      .UnicastBus()
      .SendOnly();
Configure.Serialization.Xml();
Configure.Transactions.Disable();
用()配置
.NinjectBuilder(内核)
.UseTransport()
.UnicastBus()
.SendOnly();
这根线给我一个提示


为了更好地使用WebApi,我需要实现一个自定义的IDependencyScope,我正在处理内核,我认为它产生了单例作用域的问题,所以在IDependencyScope中的Dispose方法中,我什么都不做

为什么要使用NSB的默认生成器(即autofac),然后通过常量注册它?尝试使用扩展方法NinjectBuilder并传入内核更改为使用NinjectBuilder,现在我可以像以前一样发送一条消息,但在第二次尝试时,它抛出了另一个错误:加载Ninject组件时出错ICache没有在内核的组件容器中注册这样的组件。ypu是否引用了namedscope和contextpreservation扩展?这是必需的。不引用这些将抛出这个模糊的例外不,我不知道关于这个扩展的任何事情,你能告诉我更多吗?可能这个模块已经被加载了,我试着把它放在this.kernel.Load(新名称为ScopeModule());this.kernel.Load(新的ContextPreservationModule());应用程序会抛出模块已经加载的消息
Configure.Serialization.Xml();
      Configure.Transactions.Disable();
      Configure.With()
      .NinjectBuilder(kernel)
      .UseTransport<Msmq>()
      .UnicastBus()
      .SendOnly();