Подтвердить что ты не робот

Inversion Of Control vs Dependency Injection с выбранными кавычками - правильно ли я понимаю?

Я прочитал несколько потоков, объясняющих разницу между IoC и DI, и, хотя многие объяснения противоречили друг другу, я думаю, что они все еще помогли мне понять разницу.

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

Я знаю, что на эту тему было много потоков, но я надеюсь, что этот поток не будет закрыт, так как я не думаю, что какой-либо из OP в упомянутых потоках также показывал все соответствующие сообщения (из разных потоков), которые помогли им, наконец, понять это.

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

a) Когда мы применяем принцип DIP на уровне фреймворка, то мы используем термин IoC? И один из механизмов реализации DIP на уровне каркаса DI?

b) Термин IoC не применяется, когда мы реализуем DIP (используя DI) на уровне более низкого уровня/не-рамки, в этом случае мы просто называем это DI?

c) DI помогает нам достичь DIP, передав управление фактическим созданием и выбором зависимостей третьей стороне, нейтральной для любой другой 2?

d) При использовании DIP (используя DI) на уровне структуры (IoC), три типа управления инвертируются:

  • Управление интерфейсом. Теперь модуль высокого уровня управляет интерфейсом, которым должны придерживаться модули нижнего уровня, а не наоборот.

  • Управление потоком. → Теперь код рамки (вместо пользователя/бизнес-кода) управляет потоком программы (другими словами - они (т.е. вы (т.е. бизнес-код))

  • Контроль создания зависимостей. Эта инверсия передает управление фактическим созданием и выбором зависимостей третьей стороне, которая является нейтральной для любого из других вовлеченных сторон.

e) При использовании DIP (с использованием DI) на уровне без рамки, два типа управления инвертируются:

  • Управление интерфейсом. Теперь модуль высокого уровня управляет интерфейсом, которым должны придерживаться модули нижнего уровня, а не наоборот.

  • Контроль создания зависимостей. Эта инверсия передает управление фактическим созданием и выбором зависимостей третьей стороне, которая является нейтральной для любого из других вовлеченных сторон.

?

Вот выдержки, которые помогли:

Почему так много терминов сказать то же самое? IoC и DIP

Инверсия управления - это общий термин. Инъекция зависимостей - это конкретный тип IoC

...

Инверсия управления - это когда обращается инфраструктура/инфраструктура код приложения, а не наоборот

...

может делать DI без выполнения IoC. Если вы введете aConsoleStringWriter в HelloWorld Я не думаю об этом как о IoC, потому что нет "каркас" или "инфраструктура".

Инверсия управления < Инъекция зависимостей

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

Где именно разница между IoC и DI

IoC - это способность изменять выполнение контракта. DI является способность обеспечить реализацию.

...

В традиционных приложениях разработчики будут писать бизнес-код и рамочный код. Затем бизнес-код вызывается кодом фреймворка для выполнения задач. Под моделью IoC вы "инвертируете" эту модель и создать структуру, которая принимает бизнес-модули и называет их выполнять задачи

Инъекция зависимостей - это метод (трудно назвать его шаблоном, действительно) удаления внутренних зависимостей от реализаций позволяя вводить зависимые объекты в класс/метод посредством внешний вызывающий. В рамках IoC используются инъекции зависимостей для обеспечения пользовательских модулей и другого зависимого кода для фреймворческих подпрограмм, которые "склеивают" все это вместе ". Инъекционная инъекция сильно используется IoC потому что это механизм, который позволяет им" Звонить "Вы".

DIP против DI против IoC

DIP - это принцип, который ведет нас к DI. В основном, свободный это цель, и есть по крайней мере два способа ее достижения. • Инъекция зависимостей • Локатор сервисов

Кто-нибудь имеет хорошую аналогию для инъекций зависимостей?

Сущность инверсии управления (из которой инъекция зависимостей реализация) является разделение использования объекта с управления ими.

Разница между ioc и инъекцией зависимостей

Термины Injection Dependency (DI) и инверсия управления (IoC) являются обычно используются взаимозаменяемо для описания одного и того же шаблона проектирования (хотя не все согласны в этом вопросе, и некоторые люди склонны применяйте их несколько иначе). Первоначально шаблон называемый IoC, но Мартин Фаулер предложил перейти к DI, потому что все рамки каким-то образом инвертируют контроль, и он хотел быть более специфический вопрос о том, какой аспект управления был перевернут.

Инверсия управления и инъекции зависимостей

Инверсия управления (IoC) означает, что объекты не создают другие объекты, на которые они полагаются, чтобы выполнять свою работу. Вместо этого они получают объекты, которые им нужны из внешнего источника (например, xml Файл конфигурации). Инъекция зависимостей (DI) означает, что это сделано без вмешательства объекта, обычно с помощью базового компонента, который передает параметры конструктора и задает свойства.

Благодарю вас

4b9b3361

Ответ 1

Хорошо, это моя точка зрения:

DI Overview

DIP означает, что вы программируете против абстракции. Вы инвертируете вид зависимости от реализации до абстракции.

IOC означает, что кто-то другой отвечает за получение реализации для данной абстракции. Обычно потребитель получает ключевое слово новое, чтобы получить зависимость. С IoC вы инвертируете элемент управления, чтобы потребитель не отвечал за создание экземпляра больше.

Инъекция зависимостей и Местоположение службы являются частью Инверсия управления. DIvsSL

Смотрите также: fooobar.com/questions/437377/...

Ответ 2

Я написал разницу на моем [блоге]: http://dotnet-stuff.com/tutorials/dependency-injection/dependency-inversion-principle-dependency-injection-and-inversion-of-control-dip-ioc-and-di "нажмите здесь для получения обновлений", чтобы мы могли организовать инверсию управления, Принцип инверсии зависимостей и инжекция зависимостей. Короче говоря, мы можем сказать, что -

В верхней части находится принцип инверсии зависимостей, который является способом разработки программного обеспечения. Он не говорит, как сделать независимый модуль. Инверсия управления (IoC) обеспечивает способ применения принципа DPI. Но все же IoC не дает нам конкретной реализации. Он дает некоторые методы, чтобы мы могли инвертировать элемент управления. Если мы хотим инвертировать управление с использованием инверсии связывания или создания зависимостей, тогда мы можем добиться этого, выполнив инъекцию зависимостей (DI).