Параметризованная автопроводка с PHP-DI
Я задаюсь вопросом о наилучшей практике для этого варианта использования:
У меня есть и приложение, которое имеет дело с собственной базой данных и другими настроенными пользователем базами данных. Я внедряю соединение с собственной базой данных с помощью PHP-DI, например так:
<?php
use function DI\get;
use function DI\factory;
use App\DB\Connection;
use App\DB\ConnectionFactory;
return [
'app.db.connection' => [
'driver' => 'pdo_mysql',
'host' => '127.0.0.1',
'dbname' => '',
'user' => '',
'password' => ''
],
Connection::class => factory([ConnectionFactory::class, 'createConnection'])
->parameter('params', get('app.db.connection')),
];
Но я хочу иметь общедоступные соединения с другими базами данных, чьи параметры соединения индексируются по некоторому ключу:
'app.endpoints' => add([
'endpoint1' => [
'driver' => 'pdo_sqlsrv',
...
],
'endpoint2' => [...],
'endpoint3' => [...],
]),
В моих контроллерах или консольных командах (которые легки и не проверены) я хочу иметь что-то вроде:
$connectionManager->get('endpoint1') // Maybe $connectionFactory...?
Но я хочу, чтобы экземпляр объекта подключения создавался только один раз, и, если возможно, конструктор объекта подключения вводился с некоторыми зависимостями с помощью автоматической разводки, например, с помощью регистратора.