博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laravel服务容器
阅读量:4361 次
发布时间:2019-06-07

本文共 2466 字,大约阅读时间需要 8 分钟。

\public\index.php

 

1 
make(Illuminate\Contracts\Http\Kernel::class);13 //处理请求14 $response = $kernel->handle(15 //请求实例的创建16 $request = Illuminate\Http\Request::capture()17 );18 //发送http响应头和内容19 $response->send();20 21 //程序的终止22 $kernel->terminate($request, $response);
//用来实现服务容器的实例化过程$app = new Illuminate\Foundation\Application(    realpath(__DIR__.'/../'));//下面代码向服务容器中绑定核心类服务,并返回核心类服务$app->singleton(    Illuminate\Contracts\Http\Kernel::class,    App\Http\Kernel::class);$app->singleton(    Illuminate\Contracts\Console\Kernel::class,    App\Console\Kernel::class);$app->singleton(    Illuminate\Contracts\Debug\ExceptionHandler::class,    App\Exceptions\Handler::class);return $app;

  

服务绑定

究竟是什么和什么进行绑定呢?实际上可以简单地理解为一个服务和 一个关键字进行绑定,可以简单看做是一种键值对形式, 即一个“ key ”对应一个服务对于绑定服务的不同,需要服务容器中不同的绑定函数来实现,主要包括回调函数服务绑定和实例对象服务绑定:回调函数服务绑定的就是一个回调函数,而实例对象服务绑定的是一个实例对象回调函数的绑定还分为两种,一种是普通绑定,另一种是单例绑定普通绑定每次生成该服务的实例对象时都会生成一个新的实例对象,也就是说在程序的生命周期中,可以同时生成很多个这种实例对象,而单例绑定在生成一个实例对象后,如果再次生成就会返回第一次生成的实例对象,也就是在程序的生命周期中只能生成一个这样的实例对象,如果想使用就会获取之前生成的,也就是单例模式

其中:

$app->singleton(    Illuminate\Contracts\Http\Kernel::class,    App\Http\Kernel::class);$app->singleton(    Illuminate\Contracts\Console\Kernel::class,    App\Console\Kernel::class);$app->singleton(    Illuminate\Contracts\Debug\ExceptionHandler::class,    App\Exceptions\Handler::class);

  

//$app->bind(App\ServiceTest\GeneralService::class,function($app){
// return new App\ServiceTest\GeneralService(); //}); //通过$bindings和$instances记录服务的绑定 //对于回调函数的服务绑定在$bindings //shared为true单例模式 为false普通模式 $bindings=[ 'App\ServiceTest\GeneralService::class'=>['concrete'=>{Closure::class},'shared'=>true], 'bbb'=>['concrete'=>{Closure::class},'shared'=>false], ]; //实例对象的绑定在$instances中 $instances= [ 'Illuminate\Contracts\Http\Kernel::class'=>App\Http\Kernel::class, 'Illuminate\Contracts\Console\Kernel::class'=>App\Console\Kernel::class, 'lluminate\Contracts\Debug\ExceptionHandler::class'=>App\Console\Kernel::class, ]; //除了上述回调函数绑定和实例对象绑定,还有一种:绑定具体类名称,本质上也是绑定回调函数的方式 只是回调函数是服务容器根据提供的参数自动生成的 //$app->bind(App\ServiceTest\ServiceContract::class,App\ServiceTest\GeneralService); //ServiceContract为一个几口,那么在绑定服务时可以通过类名或者接口名作为服务名,而服务是类名 ,那么对于服务名称是用类名还是用接口名好呢? //答案是接口 服务的解析:

 

服务提供者:

laravel框架式通过服务提供者来解决服务绑定问题的,每一个功能模块都有一个服务提供者,而服务提供者继承了框架提供的illuminate\ServiceProvider抽象类,

该抽象类中提供一个函数register(),所以具体类需要实现register()函数,该函数就是用于服务绑定

 

创建服务提供者:

 

注册服务提供者:

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/sunlong88/p/9366774.html

你可能感兴趣的文章
cocos2dx blender 骨骼动画实现
查看>>
ARM基础
查看>>
eclipse
查看>>
Mybatis参数传递及返回类型
查看>>
关于Ubuntu使用笔记
查看>>
调整Tomcat上的参数提高性能[转]
查看>>
在Ajax方式产生的浮动框中,点击选项包含某个关键字的选项
查看>>
SDK 操作 list-view control 实例 -- 遍历进程
查看>>
由于SSH配置文件的不匹配,导致的Permission denied (publickey)及其解决方法
查看>>
65. Valid Number
查看>>
检查MySQL主从数据一致性
查看>>
结构化日志:出错时你最想要的好朋友
查看>>
Git常用命令总结
查看>>
[算法练习]Excel Sheet Column Title
查看>>
【原创】MapReduce编程系列之表连接
查看>>
IOS开发之Swift学习笔记
查看>>
【Java基础】用LinkedList实现一个简单栈的功能
查看>>
线段树C-A Simple Problem with Integers(树懒线段树)
查看>>
Ferguson游戏
查看>>
PHPExcel
查看>>