Внедрение зависимости через метод
Обычно зависимости класса передаются в конструктор и становятся доступными внутри класса в течение всего времени его существования. При помощи инъекции через метод возможно задать зависимость, которая необходима в единственном методе класса. Передавать такую зависимость через конструктор либо невозможно, либо это влечёт за собой ненужные накладные расходы в большинстве случаев.
Метод класса может быть определён так же, как doSomething()
в примере ниже:
class MyClass extends \yii\base\Component
{
public function __construct(/*Легковесные зависимости тут*/, $config = [])
{
// ...
}
public function doSomething($param1, \my\heavy\Dependency $something)
{
// Работаем с $something
}
}
Метод можно вызвать либо передав экземпляр \my\heavy\Dependency
самостоятельно, либо использовава [[yii\di\Container::invoke()]]:
$obj = new MyClass(/*...*/);
Yii::$container->invoke([$obj, 'doSomething'], ['param1' => 42]); // $something будет предоставлено DI-контейнером