Я самообучающийся, пытаюсь стать хорошим разработчиком PHP и хочу полностью понять Dependency Injection.
Я понимаю общий принцип: в теории внедрение зависимостей делает мои классы не слишком тесно связанными с другими классами.
Но я не понимаю, как это можно полностью реализовать на практике.
Пример использования контейнера лиги PHP и примера контроллера:
/***************************************************************************************
* DI Container setup
***************************************************************************************/
$container = new Container();
/***************************************************************************************
* Register Service Providers
***************************************************************************************/
$container->addServiceProvider(new \App\Providers\ConfigProvider);
/***************************************************************************************
* Register Container Class Dependencies
***************************************************************************************/
$container->share('App\Http\Controller')
->withArguments(['config']);
Теперь в моем контроллере я бы получил введенную зависимость следующим образом:
class Controller
{
public $config;
function __construct($config)
{
$this->config = $config;
}
function index()
{
$newConfigItem = 'domain.com';
$configDomain = $this->config->setConfig($newConfigItem);
}
}
Контроллер — это просто пример, это может быть любой класс, любой тип класса, например, Serviceprovider, Middleware и т. Д.
Это более общий вопрос относительно правильной обработки внедрения зависимостей.
Разве использование метода setConfig () внедренного класса Config не создает новую тесно связанную зависимость?
Даже если бы я использовал контейнер для создания нового объекта, использование контейнера непосредственно в любом классе просто создало зависимость от метода контейнера, который используется для регистрации / расширения объектов в контейнере.
Или мне нужен дополнительный слой классов PHP, который каким-то образом оборачивает мои зависимости, чтобы использовать новые имена методов, но даже тогда этот дополнительный слой классов php имеет зависимости, которые нужно настроить, если мне нужно отключить используемые библиотеки / пакеты / компоненты.
Где я ошибаюсь в своих мыслях?
Задача ещё не решена.
Других решений пока нет …