服务提供者案例

1.定义服务:对某个业务进行逻辑封装之后的一个类

<?php
namespace App\Services;

class TestService
{

    public function __construct()
    {
    }

    public function helloWorld()
    {
        echo 'hello world';
    }
}

2.定义服务提供者:需要将定义好的服务类注册绑定,以便在程序中使用

<?php

namespace App\Providers;

use App\Services\TestService;
use Illuminate\Support\ServiceProvider;

class TestServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    public function register()
    {
        $this->app->bind('test', function ($app) {
            return new TestService();
        });
    }
}

3.注册服务提供者到容器:

App\Providers\TestServiceProvider::class,

4.使用我们的服务

<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

/**
 *
 */
class TestController extends Controller
{
    public function test1()
    {
        app('test')->helloWorld();
    }
}

 

1.什么是控制反转?以及怎么实现
        控制反转:当调用者(A)需要被调用者(B)的协助时,在传统的程序设计过程中,通常由A来创建B的实例,但在这里,创建B的工作不再由A来完成,而是将被调用者的创建移到调用者的外部(IoC容器),从而反转B的创建,消除了A对B创建的控制,因此称为控制反转。
        实现方式将创建B实例的工作交由 IoC 容器(服务容器)来完成,然后在A中注入B(通过构造器/方法注入实现),这样我们就实现了调用者与被调用者的解耦,该过程被称为依赖注入
 
2.什么是服务容器?以及它能干什么?
        服务容器:通俗的讲就是A需要B的服务,B需要C的服务,这些服务全部在服务容器中完成,统称服务容器
        用处:管理类依赖和执行依赖注入
 
3.什么是服务提供者?以及它干些什么?
        服务提供者:继承ServiceProvider的一个类,该类通过register方法,绑定一个服务(也就是业务逻辑类等等)到容器,实现这种功能的角色,称为服务提供者
        用法:可以通过 $this->app 变量访问容器,然后使用 bind 方法注册一个绑定
 
 
posted @ 2017-02-10 11:37  DoAgain  阅读(249)  评论(0)    收藏  举报