我正在尝试使用StructureMap, NHibernate and multiple databases作为我设计的来源,添加一个类型的多个实例来构建地图
以下是我在注册表中添加它们的方法:
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 :(得分:0)
我不完全确定,但这可能与您访问修改后的闭包的方式有关。
我会尝试创建变量的本地范围副本,如下所示:
foreach (ConnectionStringSettings location in ConfigurationManager.ConnectionStrings)
{
ConnectionStringSettings localLocation = location;
For<INHibernateSessionFactory>()
.Add(x => new NHibernateSessionFactory(localLocation.Name, GetSessionFactory(localLocation.ConnectionString)));
}