ServiceLocator и Открываться/Закрывать Принцип

Это не действительно вопрос случая отказа, когда 'энергозависимое' ключевое слово не определяется, больше что ошибка могла произойти, когда это не было определено. Обычно Вы собираетесь знать когда дело обстоит так лучше, чем компилятор!

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

Это поведение не является действительно тем же ключевым словом как в C++.

MSDN имеет краткое описание здесь . Вот, возможно, больше подробно сообщение на предметах Энергозависимость, Атомарность и Взаимная блокировка

5
задан oops 14 December 2009 в 06:39
поделиться

2 ответа

Как вы думаете, почему DI является излишним для вашего проекта? Шаблоны DI, такие как Constructor Injection , намного проще и чище, чем Service Locator (который я считаю анти-шаблоном).

Я считаю Service Locator анти-шаблоном, поскольку он полностью непрозрачен для пользователь API, зависимости которого должны быть установлены; таким образом, можно легко вызывать методы для ваших объектов в контексте, в котором Service Locator будет бросать, и API не дает вам абсолютно никакой подсказки, что это так.

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

7
ответ дан 13 December 2019 в 22:09
поделиться

... и нет необходимости иметь более одного экземпляра.

Вы смешиваете яблоки и апельсины. Тот факт, что вам нужен только один экземпляр класса для приложения, - это не то же самое, что сделать этот экземпляр глобально доступным - хорошая идея. С DI вы не меняете количество элементов - остается только один экземпляр. Что вы меняете, так это область переменных, которые обращаются к указанному экземпляру. Есть разница.

3
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

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