Как реализовать сеанс nhibernate для каждого шаблона запроса, используя контейнер 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. Как добиться этого с помощью Funq Container?

1 ответ

По умолчанию IOC ServiceStack регистрирует зависимости как одноэлементный по умолчанию, тогда как вместо этого вы должны зарегистрировать временную зависимость для:

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

Также этот предыдущий вопрос показывает другие примеры регистрации с использованием NHibernate с ServiceStack.

Другие вопросы по тегам