【发布时间】:2014-10-27 15:32:35
【问题描述】:
我们有一个使用 NServiceBus 向各种服务发送消息的 ASP.NET MVC 4 网站。因为我们的开发环境没有安装这些服务,所以我们为本地开发存根 ServiceBus 实例。我们使用在 Application_Start 中注册的 Autofac 模块来设置这一切并配置我们的 Bus 实例以注入控制器。
我的 NSB 3.3 配置:
public class ServiceModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.Register<IBus>((c, p) =>
{
var useServiceBus = bool.Parse(ConfigurationManager.AppSettings["UseServiceBus"]);
if (useServiceBus)
{
return NServiceBus.Configure.With()
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport().IsTransactional(false).PurgeOnStartup(false)
.MsmqSubscriptionStorage()
.UnicastBus().ImpersonateSender(false)
.CreateBus()
.Start(() => NServiceBus.Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install());
}
else
return c.Resolve<TestServiceBus>();
}).SingleInstance();
}
}
我尝试的 NSB 5.0.3 配置:
public class ServiceModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.Register<IBus>((c, p) =>
{
var useServiceBus = bool.Parse(ConfigurationManager.AppSettings["UseServiceBus"]);
if (useServiceBus)
{
var configuration = new BusConfiguration();
configuration.UsePersistence<RavenDBPersistence>();
configuration.RegisterComponents(r =>
{
r.ConfigureComponent<EnvironmentMessageMutator>(() => new EnvironmentMessageMutator(new DetectsEnvironment().GetEnvironment()), DependencyLifecycle.InstancePerCall);
});
return Bus.Create(configuration);
}
else
return c.Resolve<TestServiceBus>();
}).SingleInstance();
}
}
Bus.Create 失败并出现 ObjectDisposedException,CommonObjectBuilder 上的“无法访问已处置的对象”。我找不到任何关于在 NSB 5 中设置它的正确方法的文档,或者如何配置常规 NServiceBus 注入以允许我们执行上述存根。
(这应该标记为 NServiceBus 5,但我没有声誉)
【问题讨论】: