mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-03 05:48:11 +08:00
Merge pull request #15347 from KoJIT2009/di-support-instance-by-property-and-setters
di-support-instance-for-property
This commit is contained in:
@ -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());
|
||||
|
||||
40
tests/framework/di/stubs/BarSetter.php
Normal file
40
tests/framework/di/stubs/BarSetter.php
Normal 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;
|
||||
}
|
||||
}
|
||||
24
tests/framework/di/stubs/FooProperty.php
Normal file
24
tests/framework/di/stubs/FooProperty.php
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user