我正在尝试从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";
}
}
有关此错误的任何想法?
由于
答案 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方法中我什么都不做