Вы должны использовать псевдонимы для компонентов в контейнере для инъекций зависимости.Например:
Добавить компонент в контейнер DI:
Yii::$container->set(
'component1',
[
'class' => '\common\components\ElasticSearchClient'
],
[$elasticSearchServer1Params]
);
Получить компонент из контейнера DI
$component = Yii::container->get('component1');
$someObject = new SomeClass1($component);
Но более ясный способ решения этой задачи -регистрация одного компонента ElasticSearchClient и его конфигурации перед созданием SomeClass
// add the component to the container
Yii::$container->set(
'common\components\ElasticSearchClient',
);
// get the component from container and configure it
Yii::$container->get('common\components\ElasticSearchClient',
[],
[$elasticSearchServer1Params]
);
$someObject = new SomeClass1($component);
Кроме того, вы можете зарегистрировать SomeClass1 и SomeClass2 в контейнере DI для упрощения их создания.
$container->set('SomeClass1', function ($container, $params, $config) {
$searchClient = $contaier->get('common\components\ElasticSearchClient',
[],
[$elasticSearchServer1Params]
);
return new SomeClass1($searchClient);
});
$container->set('SomeClass2', function ($container, $params, $config) {
$searchClient = $contaier->get('common\components\ElasticSearchClient',
[],
[$elasticSearchServer2Params]
);
return new SomeClass2($searchClient);;
});