Инверсия контроля <Инъекция зависимостей
У меня возникает ощущение, что нет такой вещи, как инверсия контроля или, скорее, правильный термин - инъекция зависимости. Я ошибаюсь, чтобы предположить это?
Я пытаюсь определить IoC для себя. При этом я многому научился о контейнерах IoC и инъекции зависимостей.
Как раз сейчас, я прочитал это из сайт Мартина Фаулера:
В результате я думаю, нам нужно больше конкретное имя для этого шаблона. Инверсия управления является слишком общей и, следовательно, люди находят это сбивает с толку. В результате с большим количеством обсуждение с различными адвокатами IoC мы остановились на названии Dependency Инъекции.
В мире современного IoC нет инъекции зависимостей только одним способом достижения IoC?
Ответы
Ответ 1
Если вы принимаете определение Fowler, инверсия элемента управления - это значительно более широкий термин, чем DI, который охватывает все framework, где вы подключаетесь к фреймворку, но структура все еще находится под контролем.
Например, в .NET такие среды, как ASP.NET или Windows Presentation Foundation, в конечном счете находятся под контролем, но предоставляют различные события и Швы, которые вы можете использовать для сборки приложение. То же самое можно сказать и на других платформах.
Инъекция зависимостей - это специализация IoC, которая применяет IoC специально для управления зависимостями.
Ответ 2
Это один из немногих моментов, по которым меня и Марк не согласны. По моей книге, принцип инверсии управления тот же, что и здесь, поэтому я не буду перефразировать его.
Включение зависимостей - это всего лишь акт экстернализации создания зависимостей внешнего мира по компонентам.
Управление этими зависимостями (и множеством других вещей) - это то, что Inversion of Containers Control, и использование DI как части этого, является просто детальностью реализации.
Ответ 3
Да, IoC означает, что сам класс не контролирует вещи, а вызывается извне. Инъекция зависимостей - это способ сделать это.
Инъекционная инъекция действительно намного более конкретный термин, более четко определенный, чем инверсия управления.