Как правильно использовать внедрение зависимостей? Потому что использование методов внедренного класса создает новую зависимость

Я самообучающийся, пытаюсь стать хорошим разработчиком 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 имеет зависимости, которые нужно настроить, если мне нужно отключить используемые библиотеки / пакеты / компоненты.

Где я ошибаюсь в своих мыслях?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector