私は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イベントなしでそれを行う方法はありますか?