我正在编写一个MVC 4应用程序,需要使用多个NHibernate Session Factories。我正在使用AutoFac按名称注册这些对象。在我的global.asax中,我需要检索所有Session Factories并将它们绑定/取消绑定到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中的所有对象?