This package provides Yii 2 Dependency Injector Container capable of automatically resolving nested constructor interface-typed dependencies.
- Yii 2.0.39.3+
- PHP 7.0+
composer require bizley/deep-instantiate:^1.0
Directly - just call new \Bizley\DeepInstantiate\Container()
.
Globally - set \Yii::$container = new \Bizley\DeepInstantiate\Container();
in your entry script.
class Alpha implements AlphaInterface
{
private $beta;
public function __construct(BetaInterface $beta)
{
$this->beta = $beta;
}
}
class Beta implements BetaInterface
{
}
class Gamma
{
private $alpha;
public function __construct(AlphaInterface $alpha)
{
$this->alpha = $alpha;
}
}
With the original Container:
$container->set(BetaInterface::class, Beta::class);
$alpha = $container->get(Alpha::class);
With Deep Instantiate Container you just need:
$alpha = $container->get(Alpha::class, [Beta::class]);
For nested dependencies with the original Container:
$container->set(AlphaInterface::class, Alpha::class);
$container->set(BetaInterface::class, Beta::class);
$gamma = $container->get(Gamma::class);
For nested dependencies with Deep Instantiate Container:
$gamma = $container->get(Gamma::class, [
[
'class' => Alpha::class,
'__construct()' => Beta::class
]
]);