В настоящее время я пишу проект в ASP.NET MVC.У меня есть веб-проект и проект БД, который работает исключительно с БД.Слои выглядят так, и они взаимодействуют только с одноуровневыми слоями.
Проект БД (EF CF) - делает запросы в БД
Репозиторий - абстрагированиебазовая модель БД
Служба - Здесь происходит вся бизнес-логика.
Веб-приложение ASP.NET MVC - Представление интерфейса
Они должны быть слабо связаны, поэтому я использую инфраструктуру Unity DI / IoC
Я хочу создать один экземпляр DbContext
на запрос http.Ниже приведена логика, которую я реализовал до сих пор.
public class MyAppBaseController : Controller {
protected override void OnActionExecuting(ActionExecutingContext filterContext) {
if (HttpContext.Items["DbModel"] == null) {
HttpContext.Items["DbModel"] = MySingleton.Container.Resolve<DbContext>();
}
base.OnActionExecuting(filterContext);
}
}
Что делает то, что в конвейере запросов, если в словаре Items
текущего HttpContext
нет DbContext
, он добавляет один,Все контроллеры наследуют от него.Причина, по которой я это делаю, заключается в том, что все репозитории, которые будут вызываться во время выполнения, должны использовать один и тот же объект DbContext
для всех последовательных вызовов БД.
- Есть ли лучший способ связатьвремя жизни объекта с
HttpContext
? - Возможно ли это сделать с помощью Unity (DI / IoC framework)?