DI и конструктор с переменных количеством параметров

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

DI и конструктор с переменных количеством параметров

Сообщение Andrewkha »

Всем привет.
В проекте использую бибилотеку для работы с Active Directory https://github.com/ldaptools/ldaptools
Все операции в нем происходят через объект LdapManager - соединение с каталогом.
Решил создавать его через DI, создаю синглтон

Код: Выделить всё

    public function bootstrap($app)
    {
        $container = \Yii::$container;
        $container->setSingleton(LdapManager::class, [], [$this->getLdapManagerConfig()]);
    }
Проблема. Констурктор в классе LdapManager объявлен следующим образом:

Код: Выделить всё

    public function __construct(Configuration $config, LdapConnectionInterface ...$connections)
Соответственно, когда DI начинает его парсить, вылетает Exception 'Can not instantiate LdapTools\Connection\LdapConnectionInterface.', хотя данный параметр необязательный. Если создавать объект через new, все работает, если передать только первый параметр конфигурации.

Как можно обойти?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: DI и конструктор с переменных количеством параметров

Сообщение ElisDN »

Вручную:

Код: Выделить всё

$container->setSingleton(LdapManager::class, function () {
    $config = new Configuration();
    return new LdapManager($config);
});
Andrewkha
Сообщения: 132
Зарегистрирован: 2014.11.08, 21:27

Re: DI и конструктор с переменных количеством параметров

Сообщение Andrewkha »

Дмитрий, спасибо! решение, как всегда, на поверхности... Я заморочился чуть сильнее - отнаследовался и переопределил конструктор
Ответить