php 服务定位,服务定位器(Service Locator)
服务定位器
服务定位器是一个了解如何提供各种应用所需的服务(或组件)的对象。在服务定位器中,每个组件都只有一个单独的实例,并通过ID 唯一地标识。用这个 ID 就能从服务定位器中得到这个组件。
在 Yii 中,服务定位器是 yii\di\ServiceLocator 或其子类的一个实例。
最常用的服务定位器是application(应用)对象,可以通过 \Yii::$app 访问。它所提供的服务被称为application components(应用组件),比如:request、response、urlManager 组件。可以通过服务定位器所提供的功能,非常容易地配置这些组件,或甚至是用你自己的实现替换掉他们。
除了 application 对象,每个模块对象本身也是一个服务定位器。
要使用服务定位器,第一步是要注册相关组件。组件可以通过 yii\di\ServiceLocator::set() 方法进行注册。以下的方法展示了注册组件的不同方法:
use yii\di\ServiceLocator;
use yii\caching\FileCache;
$locator = new ServiceLocator;
// 通过一个可用于创建该组件的类名,注册 "cache" (缓存)组件。$locator->set('cache', 'yii\caching\ApcCache');
// 通过一个可用于创建该组件的配置数组,注册 "db" (数据库)组件。$locator->set('db', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
]);
// 通过一个能返回该组件的匿名函数,注册 "search" 组件。$locator->set('search', function (){
return new app\components\SolrService;
});
// 用组件注册 "pageCache" 组件$locator->set('pageCache', new FileCache);
一旦组件被注册成功,你可以任选以下两种方式之一,通过它的 ID 访问它:
$cache = $locator->get('cache');
// 或者$cache = $locator->cache;
如上所示, yii\di\ServiceLocator 允许通过组件 ID 像访问一个属性值那样访问一个组件。当你第一次访问某组件时,yii\di\ServiceLocator 会通过该组件的注册信息创建一个该组件的实例,并返回它。之后,如果再次访问,则服务定位器会返回同一个实例。
你可以通过 yii\di\ServiceLocator::has() 检查某组件 ID 是否被注册。若你用一个无效的 ID 调用 yii\di\ServiceLocator::get(),则会抛出一个异常。
因为服务定位器,经常会在创建时附带配置信息,因此我们提供了一个可写的属性,名为 yii\di\ServiceLocator::setComponents(),这样就可以配置该属性,或一次性注册多个组件。下面的代码展示了如何用一个配置数组,配置一个应用并注册"db","cache" 和 "search" 三个组件:
php return [
// ...'components'=> [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
],
'cache' => 'yii\caching\ApcCache',
'search' => function (){
return new app\components\SolrService;
},
],
];
php 服务定位,服务定位器(Service Locator)相关推荐
- Service Locator 模式
什么是Service Locator 模式? 服务定位模式(Service Locator Pattern)是一种软件开发中的设计模式,通过应用强大的抽象层,可对涉及尝试获取一个服务的过程进行封装.该 ...
- (转载)Service Locator模式(简单的IOC容器实现 MVVMLight SimpleIoc)
转载自:https://www.cnblogs.com/gaochundong/archive/2013/04/12/service_locator_pattern.html 什么是Service L ...
- php service locator,Yii源码解读-服务定位器(ServiceLocator)
SL的目的也是解耦,并且非常适合基于服务和组件的应用. Service Locator充当了一个运行时的链接器的角色,可以在运行时动态地修改一个类所要选用的服务, 而不必对类作任何的修改. 一个类可以 ...
- Service Locator服务定位器
先讲服务定位器, 有些摘录于 http://www.digpage.com/convention.html Service Locator目的也在于解耦他的模式非常贴合Web这种基于服务和组件的应用的 ...
- 三十六、服务定位器模式 (Service Locator Pattern)
服务定位器模式(Service Locator Pattern)用于想使用 JNDI 查询定位各种服务的时候 考虑到为某个服务查找 JNDI 的代价很高,服务定位器模式充分利用了缓存技术 在首次请求某 ...
- 设计模式 - 服务定位模式 Service Locator Pattern
译者序:看 spring framework 时候了解到的 Service Locator 模式,顺便搜到了这篇文章,感觉很棒,顺手翻译下,好安利给其他小伙伴. 原文链接:http://gamepro ...
- php service locator,服务定位器模式(Service Locator)
服务定位器模式(Service Locator) 服务定位器模式被一些人认为是一种反面模式.它违反了依赖倒置原则.该模式隐藏类的依赖,而不是暴露依赖(如果暴露可通过依赖注入的方式注入依赖).当某项服务 ...
- [CTO札记]惊讶于警察尚未用LBS(手机定位服务)来追踪疑犯
昨天(周六)看到2个警察抓捕疑犯的真实故事: 1)江苏吴江一女被绑架,受逼开车前往苏州途中机智地用手机拨打110报警.后警察派出大量警力封堵多个路口排查.再启用多个视频监测探头发现受疑车辆,才捕获疑犯 ...
- Framework中网络定位服务简介
前人已经将LocationManangerService的框架介绍的很不错了,可以参见下面的帖子 http://www.ibm.com/developerworks/cn/opensource/os- ...
最新文章
- 关于组织参加2021年全国大学生 智能汽车竞赛东北赛区比赛的报名通知
- 【OSS 排查方案-5】透过现象看本质之网络排查分析
- 树莓派学习笔记 1 -- 硬件的需求以及raspbian系统的安装
- 机器学习中的度量—— 向量距离
- springboot(1)使用SpringBoot基础HTTP接口GET|POST|DELETE|PUT请求
- 关于js获取radio和select的属性并控制
- 【ArcGIS风暴】ArcGIS平台上点云(.las)数据生成等高线方法案例精解
- 使用TensorFlow.js进行人脸触摸检测第2部分:使用BodyPix
- 百面机器学习 #3 经典算法:01-3 核函数支撑向量机SVM
- 简单OCX控件的开发
- 威锋 VL817-Q7 HUB 芯片,一进四出USB3.1gen1 5G速率传输。
- 使用国外服务器的注意事项
- Android 项目开发填坑记 - 谷歌商店上架被拒 Apps On Device
- 逆转的生殖——形而下的EOE补完仪式…
- 最全的 lombok 注解详情(随着版本不定时更新)
- 用计算机函数查找,Excel查找函数Vlookup详解及应用示例-excel技巧-电脑技巧收藏家...
- 常用集成电路引脚识别方法
- Python数据可视化:常用的数据可视化图形
- linux tso gso关系,1.3.1 TSO/GSO
- 研究生阶段的大数据专业都学习什么科目?
热门文章
- jvm原理、启动时间、与编译器操作系统关系
- MongoDB数据库操作---mongoose操作
- pm2 多个线程输出一个日志_PM2 源码分析
- requests 200 scrapy超时_selenium咋和scrapy一起用捏?
- python3x_Python3x 基本知识点
- 1_Excel实战_自动录入另一个表格对应的数据
- jenkins+pytest+allure接口自动化测试(windows环境)
- 结合计算机专业谈创新,计算机专业学生创新能力培养论文
- wxpython应用实例_wxPython定时器wx.Timer简单应用实例
- java spark dataset_Spark 2.0介绍:Dataset介绍和使用