Я понимаю, что ответ уже был дан здесь. Но я все еще думаю, что некоторые основы инверсии управления должны быть подробно обсуждены здесь для будущих читателей.
Инверсия управления (IoC) была построена по очень простому принципу, который называется Голливудский принцип . И это говорит о том, что
Не звоните нам, мы вам позвоним
Это значит, что не отправляйтесь в Голливуд, чтобы осуществить свою мечту, а если вы достойны, тогда Голливуд найдет вас и осуществит вашу мечту. В значительной степени перевернутый, да?
Теперь, когда мы обсуждаем принцип IoC, мы забываем о Голливуде. Для IoC должно быть три элемента: Голливуд, ты и задача, подобная осуществлению твоей мечты.
В нашем мире программирования Голливуд представляет общую платформу (может быть написана вами или кем-то еще), вы представляют написанный вами код пользователя и задачу - это то, чего вы хотите достичь с помощью своего кода. Теперь вы никогда не запускаете свою задачу самостоятельно, а не в IoC! Скорее вы спроектировали все так, чтобы ваша структура вызывала вашу задачу для вас. Таким образом, вы создали многоразовую структуру, которая может сделать кого-то героем или другого злодеем. Но эта структура всегда отвечает, она знает, когда кого-то выбирать, а кто-то знает, кем она хочет быть.
Здесь приведен пример из реальной жизни. Предположим, вы хотите разработать веб-приложение. Итак, вы создаете структуру, которая будет обрабатывать все обычные вещи, которые должно обрабатывать веб-приложение, такие как обработка http-запроса, создание меню приложения, обслуживание страниц, управление файлами cookie, запуск событий и т. Д.
А затем вы оставляете несколько хуков в своей инфраструктуре, где вы можете добавить дополнительные коды для создания пользовательского меню, страниц, файлов cookie, регистрации некоторых пользовательских событий и т. Д. При каждом запросе браузера ваша инфраструктура будет запускаться и исполнять ваши пользовательские коды, если затем будет подключена отправить его обратно в браузер.
Итак, идея довольно проста. Вместо того, чтобы создавать пользовательское приложение, которое будет контролировать все, сначала вы создаете многократно используемую среду, которая будет контролировать все, затем пишете свои пользовательские коды и подключаете их к среде для их своевременного выполнения.
Laravel и EJB являются примерами таких фреймворков.
Справка:
https://martinfowler.com/bliki/InversionOfControl.html
https://en.wikipedia.org/wiki/Inversion_of_control