我是 NServiceBus 的新手,正在努力使用结构映射在我的控制器中注入 IBus。实际上,在做了一些研究之后,我发现我们可以通过将以下代码放入 global.asax 的 Application_Start 事件中来注入它 -
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Configure.With()
.Log4Net()
.StructureMapBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(false)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus();
}
在我的控制器中,我可以使用 IBus 作为属性或构造函数注入:
private IBus Bus { get; set; }
private ITest Test { get; set; }
public MyLinkController(IBus bus, ITest test)
{
Bus = bus;
Test = test;
}
这工作正常并且注入总线没有任何问题。但我的问题是我无法控制 global.asax,所以我想将配置放在其他地方,例如我尝试将其放在结构映射注册表中,如下所示:
For<IBus>().Use(
() =>
NServiceBus.Configure.With()
.Log4Net()
.StructureMapBuilder()
.XmlSerializer()
.IsTransactional(true)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start()
);
但这无济于事。看起来结构映射需要在自己初始化之前知道配置。那么没有 application_start 事件有什么办法吗?