Я пишу приложение MVC 4, которое требует использования нескольких сессионных залов NHibernate. Я регистрирую эти объекты с помощью AutoFac по имени. В моем global.asax мне нужно получить все сеансовые фабрики и связать/развязать их с CurrentSessionContext.Как получить все компоненты AutoFac определенного типа?
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);
}
}
У меня возникла проблема с извлечением моих SessionFactories из AutoFac. А именно, когда я пытаюсь восстановить их с помощью метода Resolve
, я получаю пустую коллекцию. Тем не менее, все работает, если я вместо того, чтобы использовать ResolveNamed
метод:
SessionFactories =
new List<ISessionFactory>
{
container.ResolveNamed<ISessionFactory>("DB1"),
container.ResolveNamed<ISessionFactory>("DB2")
};
Хотя это работает, это кажется довольно хрупким (я должен обновлять этот код, если какие-либо изменения Имени или добавить/удалить SessionFactories). Есть ли способ получить все объекты из AutoFac по типу , который включает именованные экземпляры?
Возможный дубликат [autofac: Как разрешить сбор названных типов?] (Http://stackoverflow.com/questions/5779517/autofac-how-to-resolve-collection-of-named-types) – nemesv
Не является дублировать. В упомянутом вопросе спрашивается, как разрешить именованные экземпляры. Я спрашиваю, как разрешать все экземпляры по типу, независимо от того, как они были зарегистрированы в контейнере (имя, ключ, анонимно). –