3

我正在尝试使用StructureMap、NHibernate 和多个数据库将一个类型的多个实例添加到结构映射中作为我的设计来源

这是我在注册表中添加它们的方法:

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。

4

1 回答 1

0

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

我会尝试像这样创建变量的本地范围副本:

foreach (ConnectionStringSettings location in ConfigurationManager.ConnectionStrings)
{
    ConnectionStringSettings localLocation = location;
    For<INHibernateSessionFactory>()
        .Add(x => new NHibernateSessionFactory(localLocation.Name, GetSessionFactory(localLocation.ConnectionString)));
}
于 2013-01-09T17:34:14.263 回答