• laravel5.2总结--服务提供者,契约(Contracts)


    首先理解两个概念
    1.契约:一组定义了框架核心服务的接口
    2.服务提供者:所有 Laravel 应用程序启动的中心所在。
    包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者启动的。
    启动指的是 注册 事物,包括注册服务容器绑定、事件侦听器、中间件,甚至路由。
     
    我们还是继续超人的故事,现在拿xpower来具体分析
     
    xpower的诞生---(契约和服务提供者)
     
    1.定义一个契约(接口)
    appContracts文件夹下
    <?php 
    namespace AppContracts;

    interface SuperModuleContract {   //激活超能力
      public function activate(array $target);
    }
    2.一个实现这个接口的类
    appServices文件夹下
    <?php 
    namespace AppServices; 
    use AppContractsSuperModuleContract;
    class XPower implements SuperModuleContract {   public function activate(array $target) {
        // 这只是个例子。。具体自行脑补
      }
    }
    3、创建服务提供者
    appProviders文件夹下
    <?
    php namespace AppProviders; 
    
    use IlluminateSupportServiceProvider;
    use AppServicesXPower;
    class XPowerProvider extends ServiceProvider {   public function boot() { // }   public function register() {   //singleton绑定单例   //如何使用:App::make('xpower')方法时调用
      $this->app->singleton('xpower',function(){ return new XPower(); });   
      //bind绑定实例到接口以便依赖注入   // 如何使用:在类构造方法中实例化,并指定接口类型
      $this->app->bind('AppContractsSuperModuleContract',function(){ return new XPower(); }); }
    }
    4、注册服务提供者
    配置文件config/app.php的providers数组中:
    'providers' => [ //其他服务提供者 AppProvidersXPowerProvider::class, ],
    通过服务提供者,我们将超能力,绑定到了服务容器中,这样我们可以在任何时候实例化这个超能力了
     
    需要注意的一些地方:
    1.所有的服务提供者都继承了 IlluminateSupportServiceProvider 类。
    2.这个抽象类要求你在你的提供者上定义至少一个方法:register。在 register 方法中,你应该只将事物绑定至服务容器之中。永远不要试图在 register 方法中注册任何事件侦听器、路由或任何其它功能。
  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/redirect/p/6087810.html
Copyright © 2020-2023  润新知