Как реализовать сеанс 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.