Мы рассматриваем возможность интеграции контейнера для инъекций зависимостей в наш проект. Каждый DIC, на который я смотрел, использует ассоциативные массивы и/или магические методы. Например, здесь образец с страницы Pimple:
$container['session_storage'] = function ($c) {
return new $c['session_storage_class']($c['cookie_name']);
};
$container['session'] = function ($c) {
return new Session($c['session_storage']);
};
Есть ли причина для этого? Мне не нравятся строки в моем коде как что-то иное, чем буквальная строка, которая будет отображаться где-то. Вы теряете столько возможностей IDE (что делает код более сложным для поддержания, чего мы пытаемся избежать!).
Мои предпочтения были бы более похожими:
class Container {
function getSessionStorage()
{
return new $this->getSessionStorageClass($this->getCookieName);
}
function getSession()
{
return new Session($this->getSessionStorage());
}
}
Есть ли причина не делать этого? Я пропустил какую-то магию Пимпла, которая не сработает, если мы идем по этому маршруту?