#c# #.net #entity-framework-4.1 #ninject
#c# #.net #entity-framework-4.1 #ninject
Вопрос:
Используя этот пример проекта в качестве руководства, я настраиваю новый проект. Мой проект будет следовать той же базовой архитектуре, только в дополнение к проекту mvc у меня также будет проект веб-службы wcf (или, возможно servicestack.net )
Вместо того, чтобы использовать Unity для DI, как в примере, я использую Ninject. В настоящее время я настраиваю Ninject следующим образом, чтобы создавать только один экземпляр фабрики базы данных для каждого веб-запроса (и, следовательно, один класс datacontext для каждого запроса (сначала используя код EF 4.1, кстати))
kernel.Bind<IDatabaseFactory>()
.To<DatabaseFactory>()
.InScope(ctx => HttpContext.Current);
Мне любопытно, достаточно ли этого метода? Или было бы лучше позволить заводскому классу обрабатывать создание экземпляра datacontext для каждого http-запроса (и, возможно, для каждого потока, если в будущем я буду разрабатывать интерфейсы, отличные от веб-интерфейса)? Если да, есть ли какие-либо примеры того, как это сделать?
Или есть совершенно лучшее решение для решения этой проблемы?
Ответ №1:
Вы должны использовать .InRequestScope()
вместо .InScope(ctx => HttpContext.Current)
. Это гарантирует, что используется соответствующая область видимости в зависимости от того, запрашивается ли экземпляр через WCF или через ASP.NET MVC. К сожалению, чтобы в полной мере воспользоваться этим, вам придется использовать текущие сборки непрерывной интеграции из http://teamcity.codebetter.com . Смотрите также