Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
7eda78ba
Commit
7eda78ba
authored
Jul 20, 2014
by
Yang Liu
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #22 from AbrahamGreyson/master
Concept-service-locator.md proofread. [skip ci]
parents
1abaee05
901dd15e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
9 additions
and
16 deletions
+9
-16
concept-service-locator.md
docs/guide-zh-CN/concept-service-locator.md
+9
-16
No files found.
docs/guide-zh-CN/concept-service-locator.md
View file @
7eda78ba
服务定位器
(Service Locator)
服务定位器
===============
===============
服务定位器是一个了解如何提供各种应用所需的服务(或组件)的对象。在一个服务定位器中,每一个组件都只有一个单独的实例,并通过
服务定位器是一个了解如何提供各种应用所需的服务(或组件)的对象。在服务定位器中,每个组件都只有一个单独的实例,并通过ID 唯一地标识。用这个 ID 就能从服务定位器中得到这个组件。
ID 唯一地标识。用这个 ID 就能从服务定位器中得到这个组件。
在 Yii 中,服务定位器
只
是
[
[yii\di\ServiceLocator
]
] 或其子类的一个实例。
在 Yii 中,服务定位器是
[
[yii\di\ServiceLocator
]
] 或其子类的一个实例。
最最常用的服务定位器一般是
*application(应用)*
对象,可以通过
`\Yii::$app`
访问。它所提供的服务被称为
最常用的服务定位器是
**application(应用)**
对象,可以通过
`\Yii::$app`
访问。它所提供的服务被称为
**application components(应用组件)**
,比如:
`request`
、
`response`
、
`urlManager`
组件。可以通过服务定位器所提供的功能,非常容易地配置这些组件,或甚至是用你自己的实现替换掉他们。
*application components(应用组件)*
,比如:
`request`
、
`response`
、
`urlManager`
(分别是请求、响应、Url 管理器)组件。你可以通过服务定位器所提供的功能,非常容易地配置这些组件,或甚至是用你自己的实现替换掉他们。
除了
Application 对象,每一
个模块对象本身也是一个服务定位器。
除了
application 对象,每
个模块对象本身也是一个服务定位器。
要使用一个服务定位器,第一步是要注册相关组件。组件可以通过
[
[yii\di\ServiceLocator::set()
]
]
要使用服务定位器,第一步是要注册相关组件。组件可以通过
[
[yii\di\ServiceLocator::set()
]
] 方法进行注册。以下的方法展示了注册组件的不同方法:
方法进行注册。以下的方法展示了注册组件的不同方法:
```
php
```
php
use
yii\di\ServiceLocator
;
use
yii\di\ServiceLocator
;
...
@@ -48,15 +45,11 @@ $cache = $locator->get('cache');
...
@@ -48,15 +45,11 @@ $cache = $locator->get('cache');
$cache
=
$locator
->
cache
;
$cache
=
$locator
->
cache
;
```
```
如上文所示,
[
[yii\di\ServiceLocator
]
] 允许你通过组件 ID 像访问一个属性值那样访问一个组件。当你第一次访问某组件时,
如上所示,
[
[yii\di\ServiceLocator
]
] 允许通过组件 ID 像访问一个属性值那样访问一个组件。当你第一次访问某组件时,
[
[yii\di\ServiceLocator
]
] 会通过该组件的注册信息创建一个该组件的实例,并返回它。之后,如果再次访问,则服务定位器会返回同一个实例。
[
[yii\di\ServiceLocator
]
] 会通过该组件的注册信息创建一个该组件的实例,并返回它。之后,如果再次访问,则服务定位器会返回同一个实例。
你可以通过
[
[yii\di\ServiceLocator::has()
]
] 检查某组件 ID 是否被注册。
你可以通过
[
[yii\di\ServiceLocator::has()
]
] 检查某组件 ID 是否被注册。若你用一个无效的 ID 调用
[
[yii\di\ServiceLocator::get()
]
],则会抛出一个异常。
若你用一个无效的 ID 调用
[
[yii\di\ServiceLocator::get()
]
],则会抛出一个异常。
因为服务定位器,经常会在创建时附带
[
配置信息
](
concept-configurations.md
)
,因此我们提供了一个可写的属性,名为
因为服务定位器,经常会在创建时附带
[
配置信息
](
concept-configurations.md
)
,因此我们提供了一个可写的属性,名为
[
[yii\di\ServiceLocator::setComponents()|components
]
],这样就可以配置该属性,或一次性注册多个组件。下面的代码展示了如何用一个配置数组,配置一个应用并注册"db","cache" 和 "search" 三个组件:
[
[yii\di\ServiceLocator::setComponents()|components
]
],这样就可以配置该属性,或一次性注册多个组件。下面的代码展示了如何用一个配置数组,配置一个应用并注册
"db","cache" 和 "search" 三个组件:
```
php
```
php
return
[
return
[
// ...
// ...
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment