複数の NHibernate セッション ファクトリを使用する必要がある MVC 4 アプリケーションを作成しています。これらのオブジェクトを名前で AutoFac に登録しています。私の global.asax では、すべてのセッション ファクトリを取得し、それらを CurrentSessionContext にバインド/バインド解除する必要があります。
protected void Application_BeginRequest(object sender, EventArgs e)
{
foreach (ISessionFactory sessionFactory in SessionFactories)
{
if (!CurrentSessionContext.HasBind(sessionFactory))
{
CurrentSessionContext.Bind(sessionFactory.OpenSession());
}
}
}
protected void Application_EndRequest(object sender, EventArgs e)
{
foreach (ISessionFactory sessionFactory in SessionFactories)
{
ISession session = CurrentSessionContext.Unbind(sessionFactory);
session.Close();
CurrentSessionContext.Unbind(sessionFactory);
}
}
AutoFac から SessionFactories を取得する際に問題が発生しています。つまり、Resolve
メソッドを使用してそれらを取得しようとすると、空のコレクションが取得されます。ResolveNamed
ただし、代わりに次のメソッドを使用するとうまくいきます。
SessionFactories =
new List<ISessionFactory>
{
container.ResolveNamed<ISessionFactory>("DB1"),
container.ResolveNamed<ISessionFactory>("DB2")
};
これは機能しますが、かなり壊れやすいようです (名前が変更された場合はこのコードを更新するか、SessionFactories を追加/削除する必要があります)。名前付きインスタンスを含むタイプごとに AutoFac からすべてのオブジェクトを取得する方法はありますか?