服务定位器

服务定位器是一个了解如何提供各种应用所需的服务(或组件)的对象。在服务定位器中,每个组件都只有一个单独的实例,并通过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)相关推荐

  1. Service Locator 模式

    什么是Service Locator 模式? 服务定位模式(Service Locator Pattern)是一种软件开发中的设计模式,通过应用强大的抽象层,可对涉及尝试获取一个服务的过程进行封装.该 ...

  2. (转载)Service Locator模式(简单的IOC容器实现 MVVMLight SimpleIoc)

    转载自:https://www.cnblogs.com/gaochundong/archive/2013/04/12/service_locator_pattern.html 什么是Service L ...

  3. php service locator,Yii源码解读-服务定位器(ServiceLocator)

    SL的目的也是解耦,并且非常适合基于服务和组件的应用. Service Locator充当了一个运行时的链接器的角色,可以在运行时动态地修改一个类所要选用的服务, 而不必对类作任何的修改. 一个类可以 ...

  4. Service Locator服务定位器

    先讲服务定位器, 有些摘录于 http://www.digpage.com/convention.html Service Locator目的也在于解耦他的模式非常贴合Web这种基于服务和组件的应用的 ...

  5. 三十六、服务定位器模式 (Service Locator Pattern)

    服务定位器模式(Service Locator Pattern)用于想使用 JNDI 查询定位各种服务的时候 考虑到为某个服务查找 JNDI 的代价很高,服务定位器模式充分利用了缓存技术 在首次请求某 ...

  6. 设计模式 - 服务定位模式 Service Locator Pattern

    译者序:看 spring framework 时候了解到的 Service Locator 模式,顺便搜到了这篇文章,感觉很棒,顺手翻译下,好安利给其他小伙伴. 原文链接:http://gamepro ...

  7. php service locator,服务定位器模式(Service Locator)

    服务定位器模式(Service Locator) 服务定位器模式被一些人认为是一种反面模式.它违反了依赖倒置原则.该模式隐藏类的依赖,而不是暴露依赖(如果暴露可通过依赖注入的方式注入依赖).当某项服务 ...

  8. [CTO札记]惊讶于警察尚未用LBS(手机定位服务)来追踪疑犯

    昨天(周六)看到2个警察抓捕疑犯的真实故事: 1)江苏吴江一女被绑架,受逼开车前往苏州途中机智地用手机拨打110报警.后警察派出大量警力封堵多个路口排查.再启用多个视频监测探头发现受疑车辆,才捕获疑犯 ...

  9. Framework中网络定位服务简介

    前人已经将LocationManangerService的框架介绍的很不错了,可以参见下面的帖子 http://www.ibm.com/developerworks/cn/opensource/os- ...

最新文章

  1. 关于组织参加2021年全国大学生 智能汽车竞赛东北赛区比赛的报名通知
  2. 【OSS 排查方案-5】透过现象看本质之网络排查分析
  3. 树莓派学习笔记 1 -- 硬件的需求以及raspbian系统的安装
  4. 机器学习中的度量—— 向量距离
  5. springboot(1)使用SpringBoot基础HTTP接口GET|POST|DELETE|PUT请求
  6. 关于js获取radio和select的属性并控制
  7. 【ArcGIS风暴】ArcGIS平台上点云(.las)数据生成等高线方法案例精解
  8. 使用TensorFlow.js进行人脸触摸检测第2部分:使用BodyPix
  9. 百面机器学习 #3 经典算法:01-3 核函数支撑向量机SVM
  10. 简单OCX控件的开发
  11. 威锋 VL817-Q7 HUB 芯片,一进四出USB3.1gen1 5G速率传输。
  12. 使用国外服务器的注意事项
  13. Android 项目开发填坑记 - 谷歌商店上架被拒 Apps On Device
  14. 逆转的生殖——形而下的EOE补完仪式…
  15. 最全的 lombok 注解详情(随着版本不定时更新)
  16. 用计算机函数查找,Excel查找函数Vlookup详解及应用示例-excel技巧-电脑技巧收藏家...
  17. 常用集成电路引脚识别方法
  18. Python数据可视化:常用的数据可视化图形
  19. linux tso gso关系,1.3.1 TSO/GSO
  20. 研究生阶段的大数据专业都学习什么科目?

热门文章

  1. jvm原理、启动时间、与编译器操作系统关系
  2. MongoDB数据库操作---mongoose操作
  3. pm2 多个线程输出一个日志_PM2 源码分析
  4. requests 200 scrapy超时_selenium咋和scrapy一起用捏?
  5. python3x_Python3x 基本知识点
  6. 1_Excel实战_自动录入另一个表格对应的数据
  7. jenkins+pytest+allure接口自动化测试(windows环境)
  8. 结合计算机专业谈创新,计算机专业学生创新能力培养论文
  9. wxpython应用实例_wxPython定时器wx.Timer简单应用实例
  10. java spark dataset_Spark 2.0介绍:Dataset介绍和使用