Неа, вроде все правильно
$container->bind(ServiceFactoryInterface::class, ServiceFactory::class); $service = $container->make(ServiceFactoryInterface::class, ['configName' => 'test']); вот так забиндил
ну на бинд то оно не ругается
я тут вижу реализацию только ServiceFactoryInterface где в конструкт ServiceFactory ты передаешь инстанс ServiceInterface который не реализован ?
а откуда тогда оно поймет что в конструкте надо вытащить из ServiceInterface ?
Мне кажется я разобрался, позвольте сделать рефлексию: 1. При условии что у меня в службах есть доп параметры, мне нужно указать конкретную реализацию $container->bind(ServiceInterface::class, function($app) { return $app->make(Service::class, ['configName' => 'sd']); }); Верно ли утверждение? Или можно это как-то по-другому упоковывать?
🤔
Допустим сократить запись $container->bind(ServiceInterface::class, Service::class); а пото где-то вызвать $container->make(ServiceInterface::class, ['cofigName' => 'test']); Но так вылетает ошибка не указан типо парамерт
Тут вопрос встал, потому что параметры не хочется пробрасывать в колбэк, надо чтобы при вызове маке() в любой части программы можно было динамически конфигурировать службу
Угу, но вот ситуация чтобы забиндить службы и фабрику служб нужно в провайдере регистрировать, а потом ты ее можешь вызвать в любой части программы, значит должна быть make(интерфейс службы, конфиг)
делай через каллбек https://laravel.com/docs/8.x/container#simple-bindings
или так, а в give() каллбек https://laravel.com/docs/8.x/container#binding-primitives
+
в провайдере
Укажите параметры , в чем проблема
юзай вторую ссылку, это опционально будет работать
Нарушается динамичность параметров, допустим делаем в колбэке return make(Service::class, ['config' => config('a')]) - слишком жесткая ссылка на конфигурацию, не опционально, представь у меня 100 различных агрегатов в конфиги и теперь надо на каждую маке() ?)
каллбеком делай
Я представляю что в провайдере должно биндиться абстракция с реализацией, но конфигы передаваемые в конкретные реализации должны быть опциональными
я тебе уже ответил за опциональность выше
.
Я для выразительности, чтобы люди читающие поняли мой посыл, зачем мне так
+
Обсуждают сегодня