zoukankan      html  css  js  c++  java
  • 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 方法中注册任何事件侦听器、路由或任何其它功能。
  • 相关阅读:
    iOS-SetNeedsLayout,layoutNeeded和layoutSubviews方法之间的关系
    iOS-基础知识-assign,copy,retain,strong,weak的区别
    iOS中单例的两种方法
    iOS-项目国际化
    iOS-项目分析,框架搭建
    iOS-项目远程推送1
    iOS-developer.Apple开发账号操作步骤
    iOS系统办公软件ppt等如何转换windows下可以打开的格式
    iOS-Senior18-第三方初级
    iOS-Senior23-科大讯飞语音识别2
  • 原文地址:https://www.cnblogs.com/redirect/p/6087810.html
Copyright © 2011-2022 走看看