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

NinjectBuilder を使用するようにコードを変更しました

私が使用した RegisterServices メソッドで:

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

そして、このスレッドは、Web Api RC を使用した Ninject InSingletonScopeのヒントを教えてくれます

Ninject を WebApi で動作させるには、カスタム IDependencyScope を実装する必要がありました。カーネルを破棄していたのですが、シングルトン スコープで問題が発生したと思われるため、IDependencyScope の Dispose メソッドでは何もしません。

于 2013-10-23T14:18:04.650 に答える