2012-10-16 208 views
3

我想添加一个类型的多个实例使用StructureMap, NHibernate and multiple databases为我设计的来源结构映射StructureMap添加多个实例不工作

这是我如何加入他们在我注册地:

foreach (ConnectionStringSettings location in ConfigurationManager.ConnectionStrings) 
     { 
      For<INHibernateSessionFactory>() 
       .Add(x => new NHibernateSessionFactory(location.Name, GetSessionFactory(location.ConnectionString))); 
     } 

然后在我的AppSessionFactory:

public AppSessionFactory(IEnumerable<NHibernateSessionFactory> factories) 
    { 
     _factories = new List<INHibernateSessionFactory>(factories); 
    } 

无论这样或那样的工作:

_factories = ObjectFactory.GetAllInstances<INHibernateSessionFactory>().ToList(); 

这两个调用都返回两个相同的对象,相同的位置和相同的SessionFactory。

回答

0

我不完全确定,但这可能与您访问修改后的封闭的方式有关。

我会尝试创建变量的局部范围的复制像这样:

 
foreach (ConnectionStringSettings location in ConfigurationManager.ConnectionStrings) 
{ 
    ConnectionStringSettings localLocation = location; 
    For<INHibernateSessionFactory>() 
     .Add(x => new NHibernateSessionFactory(localLocation.Name, GetSessionFactory(localLocation.ConnectionString))); 
}