DI и Шаблон "одиночка" в одной реализации

Я хочу осуществить рефакторинг некоторый код с помощью платформы МОК/DI Виндзора, но моя проблема - то, что у меня есть некоторые Singleton-классы и классы Шаблона "фабрика", и я не уверен, что можно реализовать Singleton или Фабрику с помощью DI.

У кого-либо есть какие-либо идеи, если это возможно и как?

6
задан alexandrul 18 May 2010 в 05:47
поделиться

3 ответа

Шаблон проектирования Singleton расходится с DI. Хотя можно открыть синглтон настолько, что DI и Принцип открытия / закрытия начинает иметь смысл, это настолько изменит синглтон, что он почти перестанет быть синглтоном.

Поточная безопасность - это Одна большая проблема, которая приходит на ум, когда вы начинаете открывать синглтон.

Гораздо лучше просто определить свои службы и классы, не слишком учитывая их объем. Если у вас есть объект, который вы хотели бы разделить между несколькими потребителями, большинство контейнеров DI имеют концепцию времени жизни синглтона , которая имитирует преимущества шаблона проектирования синглтона без каких-либо недостатков.

Вкратце: Синглтоны - зло, и их следует избегать.

Abstract Factory ,

6
ответ дан 16 December 2019 в 21:41
поделиться

Вы не делаете, вы позволяете контейнеру IOC делать это. Если раньше у вас были явные вызовы фабрики для получения одноэлементного экземпляра объекта, теперь у вас есть контейнер IOC, создающий для вас граф объектов, и он подключает все, где оно принадлежит. Контейнер гарантирует, что ваши синглтоны являются синглтонами, и действует как фабрика.

Если вы говорите о том, что фабрика решает во время выполнения, какой тип объекта обслуживать, DI там не применяется, за исключением того, что вы можете иметь Контейнер DI внедряет фабрику в нужное вам место и управляет его объемом.

2
ответ дан 16 December 2019 в 21:41
поделиться

Большинство современных фреймворков внедрения зависимостей позволяют указать, должны ли они обслуживать один экземпляр объекта в течение всего срока действия приложения (или запроса) или создавать новые экземпляры каждый раз, когда вы его запрашиваете.

Вы также можете использовать структуру DI для разрешения зависимостей от фабрик, когда это уместно (если это вы имеете в виду). Вы можете сделать это, если фабрика выбирает подкласс на основе данных времени выполнения или если зависимый объект должен создать много экземпляров IFoo , и в этом случае вы можете внедрить IFooFactory .

]
0
ответ дан 16 December 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: