Skip to content

Commit 29ff173

Browse files
authored
Update providers.md
1 parent 5e2a44f commit 29ff173

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

6/providers.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
# 提供者
1+
# Providers
22

3-
提供程序是 `Nest`的一个基本概念。许多基本的 `Nest`类可能被视为提供者 - `service`,` repository`, `factory`, `helper` 等等。 他们都可以通过 `constructor` **注入**依赖关系。 这意味着对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 `Nest`运行时系统。 提供者只是一个用 `@Injectable()`装饰器注释的类。
3+
Providers是 `Nest`的一个基本概念。许多基本的 `Nest`类可能被视为provider - `service`,` repository`, `factory`, `helper` 等等。 他们都可以通过 `constructor` **注入**依赖关系。 这意味着对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 `Nest`运行时系统。 Provider只是一个用 `@Injectable()`装饰器注释的类。
44

55
![](https://docs.nestjs.com/assets/Components_1.png)
66

7-
在前面的章节中,我们已经创建了一个简单的控制器 `CatsController` 。控制器应处理 `HTTP` 请求并将更复杂的任务委托给**提供者**提供者是纯粹的 `JavaScript` 类,在其类声明之前带有 `@Injectable()`装饰器。
7+
在前面的章节中,我们已经创建了一个简单的控制器 `CatsController` 。控制器应处理 `HTTP` 请求并将更复杂的任务委托给**providers**Providers是纯粹的 `JavaScript` 类,在其类声明之前带有 `@Injectable()`装饰器。
88

99
?> 由于 `Nest` 可以以更多的面向对象方式设计和组织依赖性,因此我们强烈建议遵循 [SOLID](https://en.wikipedia.org/wiki/SOLID) 原则。
1010

1111
## 服务
1212

13-
让我们从创建一个简单的 `CatsService` 开始。该服务将负责数据存储和检索,由其使用 `CatsController`因此它被定义为提供者是一个很好的选择。因此,我们用这个类来装饰 `@Injectable()`
13+
让我们从创建一个简单的 `CatsService` 开始。该服务将负责数据存储和检索,由其使用 `CatsController`因此它被定义为provider是一个很好的选择。因此,我们用这个类来装饰 `@Injectable()`
1414

1515
> cats.service.ts
1616
@@ -34,7 +34,7 @@ export class CatsService {
3434

3535
?> 要使用 `CLI` 创建服务类,只需执行 `$ nest g service cats` 命令。
3636

37-
我们的 `CatsService` 是具有一个属性和两个方法的基本类。唯一的新特点是它使用 `@Injectable()` 装饰器。该 `@Injectable()` 附加有元数据,因此 `Nest` 知道这个类是一个 `Nest` 提供者。需要注意的是,上面有一个 `Cat` 接口。看起来像这样:
37+
我们的 `CatsService` 是具有一个属性和两个方法的基本类。唯一的新特点是它使用 `@Injectable()` 装饰器。该 `@Injectable()` 附加有元数据,因此 `Nest` 知道这个类是一个 `Nest` provider。需要注意的是,上面有一个 `Cat` 接口。看起来像这样:
3838

3939
```typescript
4040
export interface Cat {
@@ -81,20 +81,20 @@ Nest 是建立在强大的设计模式, 通常称为依赖注入。我们建议
8181
```typescript
8282
constructor(private readonly catsService: CatsService) {}
8383
```
84-
## 范围
84+
## 作用域
8585

86-
提供者通常具有与应用程序生命周期同步的生命周期(“范围”)。在启动应用程序时,必须解析每个依赖项,因此必须实例化每个提供程序。同样,当应用程序关闭时,每个提供者都将被销毁。但是,有一些方法可以该标提供者生命周期的请求范围。您可以[在此处](/6/fundamentals?id=注射范围)详细了解这些技术。
86+
Provider通常具有与应用程序生命周期同步的生命周期(“作用域”)。在启动应用程序时,必须解析每个依赖项,因此必须实例化每个提供程序。同样,当应用程序关闭时,每个provider都将被销毁。但是,有一些方法可以该标provider生命周期的请求范围。您可以[在此处](/6/fundamentals?id=注射范围)详细了解这些技术。
8787

8888

89-
## 定制提供者
89+
## 定制providers
9090

91-
`Nest`有一个内置的控制反转(`"IoC"`)容器,可以解决提供者之间的关系。 此功能是上述依赖注入功能的基础,但要比上面描述的要强大得多。`@Injectable()` 装饰器只是冰山一角, 并不是定义提供程序的唯一方法。相反,您可以使用普通值、类、异步或同步工厂。看看[这里](/6/fundamentals)找到更多的例子。
91+
`Nest`有一个内置的控制反转(`"IoC"`)容器,可以解决providers之间的关系。 此功能是上述依赖注入功能的基础,但要比上面描述的要强大得多。`@Injectable()` 装饰器只是冰山一角, 并不是定义providers的唯一方法。相反,您可以使用普通值、类、异步或同步工厂。看看[这里](/6/fundamentals)找到更多的例子。
9292

93-
## 可选的提供者
93+
## 可选的providers
9494

95-
有时,您可能需要解决一些依赖项。例如,您的类可能依赖于一个**配置对象**,但如果没有传递,则应使用默认值。在这种情况下,关联变为可选的,提供者不会因为缺少配置导致错误
95+
有时,您可能需要解决一些依赖项。例如,您的类可能依赖于一个**配置对象**,但如果没有传递,则应使用默认值。在这种情况下,关联变为可选的,provider不会因为缺少配置导致错误
9696

97-
要指示提供程序是可选的,请在 `constructor` 的参数中使用 `@optional()` 装饰器。
97+
要指示provider是可选的,请在 `constructor` 的参数中使用 `@optional()` 装饰器。
9898

9999
```typescript
100100
import { Injectable, Optional, Inject } from '@nestjs/common';
@@ -107,11 +107,11 @@ export class HttpService<T> {
107107
}
108108
```
109109

110-
请注意,在上面的示例中,我们使用自定义提供程序,这是我们包含 `HTTP_OPTIONS`自定义标记的原因。前面的示例显示了基于构造函数的注入,通过构造函数中的类指示依赖关系。[在此处](/6/fundamentals)详细了解自定义提供程序及其关联的 `token`
110+
请注意,在上面的示例中,我们使用自定义provider,这是我们包含 `HTTP_OPTIONS`自定义标记的原因。前面的示例显示了基于构造函数的注入,通过构造函数中的类指示依赖关系。[在此处](/6/fundamentals)详细了解自定义providers及其关联的 `token`
111111

112112
## 基于属性的注入
113113

114-
我们目前使用的技术称为基于构造函数的注入,即通过构造函数方法注入提供程序。在某些非常特殊的情况下,基于属性的注入可能会有用。例如,如果顶级类依赖于一个或多个提供者,那么通过从构造函数中调用子类中的 `super()` 来传递它们就会非常烦人了。因此,为了避免出现这种情况,可以在属性上使用 `@inject()` 装饰器。
114+
我们目前使用的技术称为基于构造函数的注入,即通过构造函数方法注入providers。在某些非常特殊的情况下,基于属性的注入可能会有用。例如,如果顶级类依赖于一个或多个providers,那么通过从构造函数中调用子类中的 `super()` 来传递它们就会非常烦人了。因此,为了避免出现这种情况,可以在属性上使用 `@inject()` 装饰器。
115115

116116
```typescript
117117
import { Injectable, Inject } from '@nestjs/common';
@@ -123,11 +123,11 @@ export class HttpService<T> {
123123
}
124124
```
125125

126-
!> 如果您的类没有扩展其他提供程序,你应该总是使用基于**构造函数**的注入。
126+
!> 如果您的类没有扩展其他provider,你应该总是使用基于**构造函数**的注入。
127127

128-
## 注册提供者
128+
## 注册provider
129129

130-
现在我们已经定义了提供程序`CatsService`),并且已经有了该服务的使用者(`CatsController`),我们需要在 `Nest`中注册该服务,以便它可以执行注入。 为此,我们可以编辑模块文件(`app.module.ts`),然后将服务添加到`@Module()`装饰器的`providers`数组中。
130+
现在我们已经定义了provider`CatsService`),并且已经有了该服务的使用者(`CatsController`),我们需要在 `Nest`中注册该服务,以便它可以执行注入。 为此,我们可以编辑模块文件(`app.module.ts`),然后将服务添加到`@Module()`装饰器的`providers`数组中。
131131

132132
> app.module.ts
133133

0 commit comments

Comments
 (0)