Один объект на экземпляр HttpContext - PullRequest
2 голосов
/ 03 декабря 2011

В настоящее время я пишу проект в 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 для всех последовательных вызовов БД.

  1. Есть ли лучший способ связатьвремя жизни объекта с HttpContext?
  2. Возможно ли это сделать с помощью Unity (DI / IoC framework)?

1 Ответ

1 голос
/ 03 декабря 2011

вы можете взять под контроль время существования экземпляра ваших зависимостей в управлении временем жизни объекта Unid, как указано здесь

вам придется написать свой собственный, который внедрит ваш экземпляр объекта в httpcontext

...