Don*_*itz 2 fluent-nhibernate servicestack funq
我正在尝试在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();
}
Run Code Online (Sandbox Code Playgroud)
并注册容器:
container.Register<NH.ISession>(c => CurrentSession).ReusedWithin(Funq.ReuseScope.Request);
container.Register<ILog>(c => LogManager.GetLogger(GetType()));
Run Code Online (Sandbox Code Playgroud)
所以我弄清楚我的问题是什么.在Funq中为NHibernate ISession使用每个请求的请求范围时,请确保依赖于它的其他服务也按请求范围设定,或者它们的后备依赖关系(在本例中为ISesssion)将在下一个请求中处理.我将容器注册更改为以下内容:
container.Register<NH.ISession>(c => CurrentSession).ReusedWithin(Funq.ReuseScope.Request);
container.Register<ILog>(c => LogManager.GetLogger(GetType()));
container.Register<IRequestService>(c => new Services.RequestService(c.Resolve<NH.ISession>(), c.Resolve<ILog>())).ReusedWithin(Funq.ReuseScope.Request);
Run Code Online (Sandbox Code Playgroud)
关键是请求服务还必须按请求作用域.
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |