我正在尝试在每个请求的会话基础上将 ServiceStack 中的 FluentNHibernate 与 Funq IoC 容器一起使用,我遇到了一个问题,即在对我的服务进行第二次请求时,我得到一个 ObjectDisposedException。Funq 不应该为每个请求创建一个新的 Session 吗?
我的理解是,通过在 Funq 中使用 ReusedWithin(ReuseScope.Request),每个请求都会获得一个新的 ISession,但这只发生在第一个请求中。在我的 AppHost 中,我有以下内容:
public static NH.ISession CurrentSession
{
get
{
SessionFactory = GetFactory();
NH.ISession session = SessionFactory.OpenSession();
return session;
}
}
private static NH.ISessionFactory GetFactory()
{
return Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
.ConnectionString(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)).Mappings(m =>
{ m.FluentMappings.AddFromAssemblyOf<Case>(); })
.BuildSessionFactory();
}
以及与容器的注册:
container.Register<NH.ISession>(c => CurrentSession).ReusedWithin(Funq.ReuseScope.Request);
container.Register<ILog>(c => LogManager.GetLogger(GetType()));