如何使用Service stack的funq容器作为依赖注入器,为每个请求模式实现nhibernate会话

时间:2016-07-11 12:18:51

标签: c# session fluent-nhibernate servicestack funq

我通过在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实现它?

1 个答案:

答案 0 :(得分:1)

默认情况下,ServiceStack's IOC默认情况下将依赖项注册为单例,而您应该为此注册一个瞬态依赖项,而不是:

container.Register<IActivityService>(c => 
    new ActivityService(SessionFactory.GetCurrentSession()))
.ReusedWithin(ReuseScope.None);

previous question显示了使用NHibernate和ServiceStack的其他注册示例。