我爱编程

Lumen - 服务容器,服务提供者,Facades的关系

2018-05-11  本文已影响0人  一梦三四年lyp
ServiceContainer 实现Contracts,具体的逻辑实现

ServiceProvider ServiceContainer的服务提供者,返回ServiceContainer的实例化,供其他地方使用,可以把它加入到app/config的provider中,会被自动注册到容器中

Facades 简化ServiceProvider的调用方式,而且可以静态调用ServiceContainer中的方法

ServiceContainer :实现Contracts,具体的逻辑实现

ServiceProvider :ServiceContainer的服务提供者,返回ServiceContainer的实例化,供其他地方使用,可以把它加入到app/config的provider中,会被自动注册到容器中

Facades: 简化ServiceProvider的调用方式,而且可以静态调用ServiceContainer中的方法

第二,在dava-project\bootstrap目录下的app.php 给应用注册服务,这里注册的服务都是服务提供者 提供 位置都在 \App\Providers下

  $app->register(\App\Providers\Dava\DavaServiceProvider::class);

第三,调用刚刚注册的服务,你可以选择在任意可以掉用方法的地方掉用

    <?php
    /**
     * Created by PhpStorm.
     * User: dava
     * Date: 2018/5/8
     * Time: 15:17
     */
    namespace App\Http\Controllers\Admin\Messages;

    use App\Define\Common;
    use App\Http\Controllers\Controller;
    use App\Logic\Admin\Messages\AdminMessagesLogic;
    use Illuminate\Support\Facades\App;
    use Illuminate\Support\Facades\Dava;

    class GetList extends Controller
    {

      public function run() {
      //没有引入Facades的调用方式,但是这样不太友好,还有优化
      $myfoo = App::make("dava");
      echo $myfoo->Test();

      //引入Facades的调用方式
      echo Dava::Test();die;
}
}

第四,引用Facades模式,找到\vendor\illuminate\support\Facades目录,
并且再里面创建Dava.php

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

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

完工

上一篇 下一篇

猜你喜欢

热点阅读