Похоже, вы ищете одноэлементный шаблон или контейнер для инъекций зависимостей (например, Castle Windsor или Unity ), настроенный для одноэлементного времени жизни для объект.
В синглтоне вы помещаете статический метод доступа к свойству «Экземпляр» и всегда возвращаете один и тот же экземпляр. Однако следует обратить внимание на две вещи на шаблоне синглтона:
- Существуют проблемы с многопоточностью, которые рассматриваются в MSDN doc для синглетонов
- Как правило, это считается анти-паттерном, поскольку оно способствует объединению классов
Используя 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>();