Репозиторий для всего приложения - PullRequest
0 голосов
/ 01 марта 2010

Я работаю над новым веб-проектом, и я столкнулся с проблемой, которая, кажется, мне никогда не удается понять, как сделать правильно Мое приложение должно использовать репозиторий, который должен быть доступен из всего приложения. В частности, он должен вызываться из ActionFilters ASP.NET MVC.

Есть мысли на эту тему?

1 Ответ

1 голос
/ 01 марта 2010

Похоже, вы ищете одноэлементный шаблон или контейнер для инъекций зависимостей (например, Castle Windsor или Unity ), настроенный для одноэлементного времени жизни для объект.

В синглтоне вы помещаете статический метод доступа к свойству «Экземпляр» и всегда возвращаете один и тот же экземпляр. Однако следует обратить внимание на две вещи на шаблоне синглтона:

  1. Существуют проблемы с многопоточностью, которые рассматриваются в MSDN doc для синглетонов
  2. Как правило, это считается анти-паттерном, поскольку оно способствует объединению классов

Используя DI-контейнер, объекты создаются автоматически с любыми зависимостями (аргументами конструктора). Объекты, сконфигурированные с «временем жизни синглтона», будут создаваться только один раз, а экземпляр совместно используется всеми объектами, которые зависят от него (остерегайтесь проблем с многопоточностью).

// The repository argument will be resolved by the DI container
public ObjectConstructor(IRepositoryInterface repository)
{
    this.repository = repository;
}

В случае Атрибутов (например, ActionFilters), где класс создается средой выполнения, вы обращаетесь к контейнеру (или его абстракции) напрямую и запрашиваете свой экземпляр:

this.repository = Container.Instance.Resolve<IRepositoryInterface>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...