ServiceContainer, ServiceProvider, Facades关系

  • ServiceContainer 实现Contracts,具体的逻辑实现.
  • ServiceProvider ServiceContainer的服务提供者,返回ServiceContainer的实例化,供其他地方使用,可以把 它加入到app/config的provider中,会被自动注册到容器中.
  • Facades 简化ServiceProvider的调用方式,而且可以静态调用ServiceContainer中的方法.
实现

定义一个ServiceContainer,实现具体的功能

namespace App\Services;

class TestService {
    public function teststh($data){
        return 'dabiaoge'.$data;
    }
}

定义一个ServiceProvider供其他地方使用ServiceContainer

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class TestServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //单例绑定
        $this->app->singleton('Test',function(){
            return new \App\Services\TestService();
        });
      //也可以这样绑定,需要先use App;
        App::singleton('Test',function(){
            return new \App\Services\TestService();
        });
   
    }

在app/config.php中的providers数组中加入ServiceProvider,让系统自动注册.

 App\Providers\TestServiceProvider::class,

这时候就可以使用了

use App;
public function all( Request $request){
    $a='666';
    $test=App::make('Test');//
    echo $test->teststh($a);

这样太麻烦,还需要用make来获取对象,为了简便,就可以使用门面功能,定义门面TestFacade

namespace App\Facades;
use Illuminate\Support\Facades\Facade;

class TestFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        //这里返回的是ServiceProvider中注册时,定义的字符串
        return 'Test';
    }
}

在控制器里就可以直接调用了

use App\Facades\TestFacade;
public function all()
{
    $a='666';
    //从系统容器中获取实例化对象
      $test=App::make('Test');
      echo $test->teststh($a);
    //或者使用门面
    echo TestFacade::test($a);
}    
【转自 https://segmentfault.com/a/1190000004965752】
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,246评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,999评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,402评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,835评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,417评论 11 349