0

我正在尝试从我的 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();
    }
}

在我的控制器中

public class CreatedOrderMessageController : ApiController
{
  private readonly IBus bus;

  public CreatedOrderMessageController(IBus bus)
  {
    this.bus = bus;
  }

  public string Get(int id)
  {
    bus.Send(new OrderCreatedMessage(id));
    return "true";
  }
}

对这个错误有什么想法吗?

谢谢

4

1 回答 1

2

我更改了 de 代码以使用 NinjectBuilder

在我使用的 RegisterServices 方法中:

Configure.Serialization.Xml();
      Configure.Transactions.Disable();
      Configure.With()
      .NinjectBuilder(kernel)
      .UseTransport<Msmq>()
      .UnicastBus()
      .SendOnly();

这个线程给了我一个提示Ninject InSingletonScope with Web Api RC

为了 Ninject 与 WebApi 一起工作,我需要实现一个自定义的 IDependencyScope 我正在处理内核,我认为它产生了单例范围的问题,所以在 IDependencyScope 的 Dispose 方法中我什么都不做

于 2013-10-23T14:18:04.650 回答