如何检索某种类型的所有AutoFac组件?

时间:2013-02-23 11:17:35

标签: nhibernate autofac

我正在编写一个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中的所有对象?

1 个答案:

答案 0 :(得分:1)

使用Resolve<IEnumerable<ISessionFactory>>()

有关详细信息,请参阅Relationship Types