我通过在global.asax中将会话注入服务方法来获取会话
1
protected void Application_Start()
{
this.RegisterContainer();
}
2
private void RegisterContainer()
{
container.Register<IActivityService>(c => new ActivityService(SessionFactory.GetCurrentSession()));
}
3在服务方法中,我将会话作为
using (var transaction = _session.BeginTransaction())
{
........................
}
问题是当并发请求来到这个服务方法时,它会抛出异常。我发现Nhibernate不支持concurency.Ho使用Funq Container实现它?
答案 0 :(得分:1)
默认情况下,ServiceStack's IOC默认情况下将依赖项注册为单例,而您应该为此注册一个瞬态依赖项,而不是:
container.Register<IActivityService>(c =>
new ActivityService(SessionFactory.GetCurrentSession()))
.ReusedWithin(ReuseScope.None);
此previous question显示了使用NHibernate和ServiceStack的其他注册示例。