我們有一個ASP.NET MVC 4網站使用NServiceBus發送消息到各種服務。因爲我們的開發環境沒有安裝這些服務,所以我們爲本地開發存根ServiceBus實例。我們使用在我們的Application_Start中註冊的Autofac模塊來完成這一切,並配置我們的總線實例以便注入到控制器中。NServiceBus版本5 Asp.NET MVC
我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,但我沒有信譽)
這會有幫助嗎? https://github.com/Particular/NServiceBus.Msmq.Samples/blob/master/VideoStore.Msmq/VideoStore.ECommerce/Global.asax.cs – 2014-10-27 17:37:16