Какое-то однобокое решение:
if (!isset($config['dependencyClass'])) {
$this->dependencyClass = new Dependency();
}
Вроде как и внедрение зависимости, но всё-равно остаётся жесткая связь.
А чем вас не устроил родной Yii сервис-локатор через конфиг?
Можно было бы делать конфигурирование зависимости как компонента yii вот так:
//config/web.php
"components"=>[
//...
"model_deps"=>[
"class"=>"app\components\ModelDependenciesService",
"default_dependency"=>"app\model\model_2",
"dependencies"=>[
"app\model\model_1"=>[
"dep_1"=>"app\model\model_3",
//....
]
]
]
//...
]
// в базовом классе модели
public function getDepClass($dep_name){
retrn Yii::$app->model_deps->depClass(static,$dep_name); // не помню точно как текущий класс брать
}
// где-то в модели
public function getDependencies()
{
return $this->hasMany($this->getDepClass($dep_name), ['modelId' => 'id']);
}
В классе ModelDependenciesService, естественно надо реализовать метод depClass, который будет возвращать класс зависимости или класс по умолчанию, если зависимость не определена.