Область действия запроса Ninject и порожденный поток

#asp.net-mvc #multithreading #nhibernate #ninject

#asp.net-mvc #многопоточность #nhibernate #ninject

Вопрос:

У меня настроено мое приложение MVC с Ninject и NHibernate. У меня есть несколько запросов, которые поступают, и все, что они делают, это ставят в очередь некоторую работу, запускают поток для обработки очереди и затем возвращаются.

Для моего сеанса NHibernate установлено значение ReqeustScope. теперь мой вопрос в том, уничтожает ли Ninject мой объект сеанса, как только запрос завершается? Или он сохранит его для порожденных потоков?

Ответ №1:

Я не очень знаком с NInject, но если он работает как другие контейнеры DI, я бы ожидал, что ваш сеанс будет недоступен после завершения запроса. Если вам нужно запустить фоновый процесс в том же домене приложения, вы могли бы рассмотреть возможность предоставления двух путей для разрешения ISessions, один с использованием ThreadScope для доступа к вашим фоновым потокам, а другой с использованием RequestScope для веб-части приложения. Просто будьте осторожны, если вам нужно передать объекты, полученные с помощью веб-сеанса, в фоновый поток.

Если вы можете разделить свои фоновые процессы на другой домен приложения, вы также можете создать пользовательскую область, которая проверяет наличие HttpContext, а затем решает, какую область использовать.

Ответ №2:

Ответ — да, Ninject попытается деактивировать объект сеанса в какой-то момент после того, как HttpContext будет собран мусором. Смотрите это сообщение в блоге:

http://kohari.org/2009/03/06/cache-and-collect-lifecycle-management-in-ninject-20/