我正在编写一个需要使用多个 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 检索所有对象?