Merge pull request #15347 from KoJIT2009/di-support-instance-by-property-and-setters

di-support-instance-for-property
This commit is contained in:
Dmitry Naumenko
2017-12-18 22:31:22 +02:00
committed by GitHub
5 changed files with 82 additions and 0 deletions

View File

@ -15,7 +15,9 @@ use yiiunit\data\ar\Cat;
use yiiunit\data\ar\Order;
use yiiunit\data\ar\Type;
use yiiunit\framework\di\stubs\Bar;
use yiiunit\framework\di\stubs\BarSetter;
use yiiunit\framework\di\stubs\Foo;
use yiiunit\framework\di\stubs\FooProperty;
use yiiunit\framework\di\stubs\Qux;
use yiiunit\framework\di\stubs\QuxInterface;
use yiiunit\TestCase;
@ -95,6 +97,19 @@ class ContainerTest extends TestCase
$this->assertInstanceOf($Bar, $foo->bar);
$this->assertInstanceOf($Qux, $foo->bar->qux);
// predefined property parameters
$fooSetter = FooProperty::className();
$barSetter = BarSetter::className();
$container = new Container();
$container->set('foo', ['class' => $fooSetter, 'bar' => Instance::of('bar')]);
$container->set('bar', ['class' => $barSetter, 'qux' => Instance::of('qux')]);
$container->set('qux', $Qux);
$foo = $container->get('foo');
$this->assertInstanceOf($fooSetter, $foo);
$this->assertInstanceOf($barSetter, $foo->bar);
$this->assertInstanceOf($Qux, $foo->bar->qux);
// wiring by closure
$container = new Container();
$container->set('qux', new Qux());

View File

@ -0,0 +1,40 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yiiunit\framework\di\stubs;
use yii\base\BaseObject;
/**
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*
* @property QuxInterface $qux
*/
class BarSetter extends BaseObject
{
/**
* @var QuxInterface
*/
private $qux;
/**
* @return QuxInterface
*/
public function getQux()
{
return $this->qux;
}
/**
* @param mixed $qux
*/
public function setQux(QuxInterface $qux)
{
$this->qux = $qux;
}
}

View File

@ -0,0 +1,24 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yiiunit\framework\di\stubs;
use yii\base\BaseObject;
/**
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*
* @property BarSetter $bar
*/
class FooProperty extends BaseObject
{
/**
* @var BarSetter
*/
public $bar;
}