Laravel Service Container 类的依赖管理和依赖注入等容器相关案例

本文介绍了Laravel框架中的ServiceContainer是如何管理类之间的依赖,并通过依赖注入简化代码。详细阐述了依赖注入的流程,展示了从Head、Person、Tv到Family的实例化过程,以及如何通过ServiceContainer进行类的绑定和优化。同时,讨论了不使用依赖注入时如何通过ServiceContainer解析对象和服务。示例代码解释了绑定和解析的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Laravel Service Container 类的依赖管理和依赖注入

优点:
很好的管理类与类之间的依赖管理
使用简单
流程:
1、在创建Family前先将相关的依赖Head、Person、Tv先进行了注入和管理,最后在才进行Family的实例化
2、流程Head-》Person、Tv-》Family

Route::get('/', function (Family $family) {

});

class Head
{
    public function __construct()
    {
        echo "Head created <br/>";
    }
}

class Person
{
    public $head;
    public function __construct(Head $head)
    {
        $this->head = $head;
        echo "Person created <br/>";
    }
}

class Tv
{
    public function __construct()
    {
        echo "Tv created <br/>";
    }
}

class Family
{
    public $person;
    public $tv;

    function __construct(Person $person, Tv $tv)
    {
        $this->person = $person;
        $this->tv = $tv;

        echo "family created <br/>";
    }
}

Service Container Binding - 如何绑定类和服务

实现类与类之间的绑定关系,可以通过单例优化

Route::get('/', function (Family $family) {

});

class Head
{
    public function __construct()
    {
        echo "Head created <br/>";
    }
}

class Person
{
    public $head;

    public function __construct(Head $head)
    {
        $this->head = $head;
        echo "Person created <br/>";
    }
}

class Tv
{
    public function __construct()
    {
        echo "Tv created <br/>";
    }
}

class Family
{
    public $person;
    public $tv;

    function __construct($person, $tv)
    {
        $this->person = $person;
        $this->tv = $tv;

        echo "family created <br/>";
    }
}

//绑定类与类之间的依赖关系
\Illuminate\Support\Facades\App::bind('Family',function (){
    echo 'family binding <br/>';
    //手动实现类与类之间的绑定关系
    return new Family(new Person(new Head()),new Tv());
});

Service Container 不使用依赖注入如何解析对象或服务

app(‘Family’)


Route::get('/', function () {
    dd(app('Family'));
});

class Head
{
    public function __construct()
    {
        echo "Head created <br/>";
    }
}

class Person
{
    public $head;

    public function __construct(Head $head)
    {
        $this->head = $head;
        echo "Person created <br/>";
    }
}

class Tv
{
    public function __construct()
    {
        echo "Tv created <br/>";
    }
}

class Family
{
    public $person;
    public $tv;

    function __construct($person, $tv)
    {
        $this->person = $person;
        $this->tv = $tv;

        echo "family created <br/>";
    }
}

//绑定类与类之间的依赖关系
\Illuminate\Support\Facades\App::bind('Family',function (){
    echo 'family binding <br/>';
    //手动实现类与类之间的绑定关系
    return new Family(new Person(new Head()),new Tv());
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值