如何检索某种类型的所有AutoFac组件?
我正在写一个需要使用多个NHibernate会话工厂的MVC 4应用程序。我正在使用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);
}
}
我遇到了从AutoFac中检索我的SessionFactory的问题。也就是说,当我尝试使用Resolve
方法检索它们时,我收到了一个空集合。然而,事情的工作,如果我改用ResolveNamed
方法:
SessionFactories =
new List<ISessionFactory>
{
container.ResolveNamed<ISessionFactory>("DB1"),
container.ResolveNamed<ISessionFactory>("DB2")
};
虽然这个工作,它似乎相当脆弱(如有更改名称,或者我添加/删除SessionFactories我必须更新此代码)。有没有办法从类型中检索AutoFac中的所有对象,其中包括命名实例?
使用Resolve<IEnumerable<ISessionFactory>>()
进一步的信息请参见Relationship Types。
我试过了,但AutoFac返回一个空列表。 – 2013-02-27 16:17:45
呵呵,我不知道这个名字的注册是如何运作的。如果你的名字是'Name
[autofac:如何解析命名类型的集合?](http://stackoverflow.com/questions/5779517/autofac-how-to-resolve-collection-of-named-types) – nemesv 2013-02-23 13:16:10
不是重复。引用的问题询问如何解析命名实例。我问如何解决所有类型的实例,无论他们如何注册容器(名称,密钥,匿名) – 2013-02-25 03:19:54