Разделение - это очень общий принцип, применимый во многих областях. Инверсия зависимостей - это особая форма развязки, в которой вы отделяете верхние уровни вашей системы от нижних уровней, разделяя их на библиотеки и используя интерфейсы.Это позволяет заменять части системы более низкого уровня без значительных переделок.
Например, вместо частей системы более высокого уровня, создающих конкретные экземпляры классов более низкого уровня, для развязки можно использовать контейнер IoC.как создаются объекты.
Инверсия управления - это принцип проектирования, используемый библиотеками фреймворка, который позволяет фреймворку восстановить некоторый контроль из приложения.Т.е. инфраструктура управления окнами может вызывать код приложения, когда происходят определенные события пользовательского интерфейса.Мартин Фаулер использует термин Голливудский принцип , как в Не звоните нам, мы позвоним вам .Разъединение является важной частью инверсии управления.
Но при чем здесь контейнер IoC , связанный с инверсией управления? Цитируя Мартина Фаулера :
Инверсия контроля - слишком общий термин, и поэтому люди находят его запутанным.В результате, после многочисленных дискуссий с различными адвокатами IoC, мы остановились на названии Dependency Injection.
(Обратите внимание, что Мартин Фаулер говорит о инъекции зависимостей , а не зависимостиinversion .)
Контейнер IoC помогает реализовать внедрение зависимостей, и, возможно, лучшим термином будет контейнер внедрения зависимостей.Тем не менее, имя контейнера IoC, кажется, придерживается.Внедрение зависимостей является важным компонентом в инверсии зависимостей, но использование контейнеров IoC для внедрения зависимостей может сбивать с толку, поскольку инверсия управления является более широким и более общим принципом.
Вы отмечаете, что наименование не оченьнепротиворечиво, но это не должно быть большим сюрпризом, так как эти термины были изобретены и использованы независимо, даже если они перекрываются.