zoukankan      html  css  js  c++  java
  • laravel 服务提供者

    1.创建服务提供者命令

    php artisan make:provider 名称

    2.绑定服务

    //单例绑定
    $this->app->singleton('b', function () {
         return new AppHttpServicesBservice;
    });
    
    //普通绑定
    $this->app->bind('b', function () {
         return new AppHttpServicesBservice;
    });

    服务提供者里是可以通过$this->app调用全局容器对象的.其他地方有如下几种调用方法:

    1.app()
    
    2.App
    
    3.$app = require_once __DIR__.'/../bootstrap/app.php';

    解析注册服务方法:

    var_dump(App::make('b'));
    
    var_dump(resolve('b'));
    
    var_dump(app('b'));

     上下文绑定:

    $this->app->when('AppHttpControllersTestController')
                ->needs(BaseService::class)
                ->give('AppHttpServicesBservice');
    
            $this->app->when('AppHttpControllersFooController')
                ->needs(BaseService::class)
                ->give('AppHttpServicesCservice');

    此绑定只支持依赖注入  也就是在这两个controller的构造函数注入类型为BaseService的类时  返回的是两个不同的服务。

    注:这里为什么构造函数可以实现自动注入,因为在运行过程中 先反射这个控制器 是否有参数为对象类型约束  是的话  就要去实例化这个类,并传入构造函数的参数中。

    标签绑定:

    $this->app->tag(['Bservice','Cservice'],'ext');
    
     $this->app->bind('Aservice',function () {
                 return new AppHttpServicesAservice($this->app->tagged('ext'));
    });

    这里tagged获取的是上面标记的服务数组.

    三种获取注册服务的方法:

    1. app($serverName);
    
    2.App::make($serverName);
    
    3.resolve($serverName);
  • 相关阅读:
    合数分解为质数的乘积模板
    P2626 斐波那契数列(升级版)(合数的质数分解, 大数为素数的概率十分小的利用)
    1305 Pairwise Sum and Divide
    1344 走格子 (前缀和)
    1347 旋转字符串
    E
    pek (北大oj)3070
    数学中各种矩阵收集(转至其他博主)
    (数论)逆元的线性算法
    洛谷P2627 修剪草坪 题解 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/tudou1223/p/9356065.html
Copyright © 2011-2022 走看看