在WebApi App中使用Ninject注入NServiceBus

时间:2013-10-21 17:44:34

标签: 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 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";
  }
}

有关此错误的任何想法?

由于

1 个答案:

答案 0 :(得分:2)

我更改了de code以使用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方法中我什么都不做