Yii2依赖注入容器讲解 [ 技术分享 ]
详细视频:点击查看
系列视频列表:点击查看
流程图:
Yii2容器3种类型的依赖注入 构造方法注入 在参数类型提示的帮助下,DI 容器实现了构造方法注入。当容器被用于创建一个新对象时,类型提示会告诉它要依赖什么类或接口。容器会尝试获取它所依赖的类或接口的实例,然后通过构造器将其注入新的对象。 Setter 和属性注入 Setter 和属性注入是通过配置提供支持的。当注册一个依赖或创建一个新对象时,你可以提供一个配置,该配置会提供给容器用于通过相应的 Setter 或属性注入依赖。 PHP 回调注入 这种情况下,容器将使用一个注册过的 PHP 回调创建一个类的新实例。回调负责解决依赖并将其恰当地注入新创建的对象。
构造方法注入
例子1.
public function actionConstructdi(){
$container=new Container();
$container->set('userFinder', 'dandinglong\containertest\UserFinder');
$aaa=$container->get('userFinder');
var_dump($aaa);
}
组件类
namespace dandinglong\containertest;
use yii\db\Connection;
class UserFinder
{
public $db;
public function __construct(Connection $db)
{
$this->db = $db;
}
public function findUser()
{
}
}
例子2.
public function actionConstructdi2(){
$container=new Container();
$container->set('yii\db\Connection', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);
$container->set('userFinder', 'dandinglong\containertest\UserFinder');
$aaa=$container->get('userFinder');
var_dump($aaa);
}
属性注入例子
public function actionSetterdi(){
$container=new Container();
$container->set('db', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);
$aaa=$container->get('db');
var_dump($aaa);
}
Setter注入例子
public function actionSetterdi2(){
$container=new Container();
$aaa=$container->get('dandinglong\containertest\Foo',[],[
'bar'=>$container->get('dandinglong\containertest\Bar')
]);
var_dump($aaa);
}
组件类
namespace dandinglong\containertest;
use yii\base\Object;
class Foo extends Object
{
private $bar;
public function getBar()
{
return $this->_qux;
}
public function setbar($bar)
{
$this->bar = $bar;
}
}
namespace dandinglong\containertest;
class Bar{
}
PHP 回调注入
public function actionCallbackdi(){
$container=new Container();
$container->set('Foo', function ($container,$params,$config) {
echo "<pre>";
print_r($params);
print_r($config);
$obj=new Foo();
$obj->Bar=$container->get('dandinglong\containertest\Bar');
return $obj;
});
$aaa=$container->get('Foo',['param1'=>1],['config1'=>1]);
var_dump($aaa);
}
蛋定龙
注册时间:2016-06-07
最后登录:2017-07-30
在线时长:3小时11分
最后登录:2017-07-30
在线时长:3小时11分
- 粉丝2
- 金钱40
- 威望10
- 积分170