Как реализовать datcontext для запроса / потока, используя фабричный шаблон - PullRequest
5 голосов
/ 30 сентября 2011

Используя этот пример проекта в качестве руководства, я настраиваю новый проект.Мой проект будет следовать той же базовой архитектуре, только в дополнение к проекту MVC, у меня также будет проект веб-службы wcf (или, возможно, servicestack.net)

Вместо использования Unity для DI, как в примере,Я использую Ninject.В настоящее время я настраиваю Ninject следующим образом, чтобы создать только один экземпляр фабрики баз данных для каждого веб-запроса (и, следовательно, один класс datacontext для каждого запроса (сначала используя код EF 4.1))

 kernel.Bind<IDatabaseFactory>()
       .To<DatabaseFactory>()
       .InScope(ctx => HttpContext.Current);

Мне любопытно, если этот методдостаточно?Или было бы лучше позволить фабричному классу обрабатывать создание datacontext для каждого http-запроса (и, возможно, для каждого потока, если бы в будущем я разрабатывал не веб-интерфейсы)?Если да, то есть ли примеры того, как это сделать?

Или есть лучшее решение для этого?

1 Ответ

4 голосов
/ 03 октября 2011

Вы должны использовать .InRequestScope() вместо .InScope(ctx => HttpContext.Current).Это гарантирует, что соответствующая область используется в зависимости от того, запрашивается ли экземпляр через WCF или через ASP.NET MVC.К сожалению, чтобы в полной мере воспользоваться этим, вам придется использовать текущие сборки непрерывной интеграции, начиная с http://teamcity.codebetter.com.Смотри также

https://github.com/ninject/ninject.extensions.wcf

https://github.com/ninject/ninject.web.mvc

...