我正在尝试使用 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。
最佳答案
我不完全确定,但这可能与您访问修改后的闭包的方式有关。
我会尝试像这样创建一个局部作用域的变量副本:
foreach (ConnectionStringSettings location in ConfigurationManager.ConnectionStrings)
{
ConnectionStringSettings localLocation = location;
For<INHibernateSessionFactory>()
.Add(x => new NHibernateSessionFactory(localLocation.Name, GetSessionFactory(localLocation.ConnectionString)));
}
关于c# - StructureMap 添加多个实例不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12914820/