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

  • Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现里面的方法
ServiceContainer 实现Contracts,具体的逻辑实现

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

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

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

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

Facades: 简化ServiceProvider的调用方式,而且可以静态调用ServiceContainer中的方法
  • 操作示例
    首先先在:app\Providers\Dava目录下创建DavaServiceProvider.php文件

     <?php
    /**
       * Created by PhpStorm.
       * User: dava
       * Date: 2018/5/11
       * Time: 17:54
     */
    
    namespace App\Providers\Dava;
    
    use App\Http\Controllers\test;
    use Illuminate\Support\ServiceProvider;
    
    class DavaServiceProvider extends ServiceProvider
    {
      /**
       * Bootstrap the application services.(引导应用程序服务。)
       *
       * @return void
       */
      public function boot()
      {
      //
      }
    
      /**
     * Register the application services.(注册应用程序服务。)
     *
     * @return void
     */
     public function register()
    {
      //
      $this->app->bind('dava',function(){ 
          return new test();    //要操作的对象
      });
    }
    }
    

第二,在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';
}
}

完工

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 3,076评论 0 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • 过去做事情急,什么东西拿起来就用,不喜欢进行系统性的学习,造成在使用过程中的错误和低效,现在感觉自己耐心多了,用之...
    马文Marvin阅读 2,013评论 0 10
  • Laravel 学习交流 QQ 群:375462817 本文档前言Laravel 文档写的很好,只是新手看起来会有...
    Leonzai阅读 8,011评论 2 12
  • 1. 服务提供者配置: 2. 服务提供者主要方法: 3. 注册服务提供者流程 3.1 注册流程的过程大概 3.1...
    AntFoot阅读 3,843评论 1 6