NServiceBus 4.0.3、StructureMap 2.6.4.0、NHibernate を使用しています
エンドポイントを次のように構成しました。
public class EndpointConfig : IConfigureThisEndpoint,
AsA_Client, IWantCustomInitialization
{
public void Init()
{
Configure.With(
.StructureMapBuilder(getContainer());
Configure.Features.Disable<SecondLevelRetries>();
Configure.Features.Disable<Sagas>();
Configure.Features.Disable<TimeoutManager>();
}
}
private IContainer getContainer()
{
var container = new Container(x =>
{
x.Scan(s =>
{
s.WithDefaultConventions();
s.TheCallingAssembly();
});
x.ForSingletonOf<ISessionFactory>().Use(createSessionFactory());
x.For<ISession>().Use(context =>
context.GetInstance<ISessionFactory>().OpenSession());
});
return container;
}
プラグイン ファミリがあり、実行時にオブジェクトのインスタンスを取得したい (コンストラクタ インジェクションを使用できない)。
StructureMap の世界では、以下を使用して実行できます。
ObjectFactory.GetNamedInstance<ISomething>("familyName");
しかし、NServiceBus を structuremap で使用している場合、メッセージごとにネストされたコンテナーが取得されます。
オブジェクトのインスタンスを取得したい場合、上記のコードは親コンテナーからのインスタンスのみを提供します。ObjectFactory は初期化されていないため、インスタンスを取得しません。
コンテナーで ObjectFactory を初期化するとイベントが発生します。これは静的ラッパーであるため、メッセージごとに使用しても安全ではありません。
では、プラグイン ファミリーを使用できるように、指定されたメッセージの子コンテナーをどのように処理すればよいでしょうか?