如何将 httpClient 注入到实例化服务中?
How do I inject httpClient into an instantiated service?
我在 app.module.ts 中实例化 MyService,并在我的代码中提供它。
但是,我希望 MyService 使用 httpClient,但我无法angular- 惯用地实例化 httpClient 作为参数传递给 MyService。我不确定在 MyService 中访问 httpClient 的正确方法是什么。
我研究过直接实例化 httpClient,然后将其作为参数传递给我的服务。然而,这似乎造成了循环依赖。我也尝试过弄乱注入器,但显然 Angular 团队特别建议不要这样做。我强烈觉得我缺少一些简单的东西。
app.module.ts
imports: [
...
httpClientModule
...
],
function MainServiceFactory() {
return new MyService();
}
...
providers: [{
provide: MyService,
useFactory: MainServiceFactory
}],
...
MyService.ts
...
constructor(private http : HttpClient) {
...
}
没有实例化并作为 httpClient 的参数传递:我自然得到一个 "error in app.module.ts, expected 1 argument"!
通过实例化,我违反了 angular 建议。
编辑:
我忽略了指定我确实导入了 httpClientModule
大家都说,你要导入HttpClientModule
查看您的代码,我认为您正在尝试处理 angular's dependency injection
:
我在 stackblitz 中做了一个例子:
https://stackblitz.com/edit/angular-yqvlv7?file=src%2Fapp%2Fapp.module.ts
我在这里定义了一个抽象class来表现得像一个接口,然后my.service
实现了这个接口。
在 app.module 中,我使用 my-service
class 提供 'interface'。做完这一切,你可以在组件中注入'interface'(在这个link,hello.component.ts)
HttpClient
只在my-service
注入,完全没有问题
希望能帮助您更好地理解它。
如 Angular API 中所述,FactoryProvider 有一个可选的 deps
字段继承自 core/FactorySansProvider。该字段是一个数组,您可以在其中放置工厂的依赖项。唯一需要的更改是:
function MainServiceFactory(http: HttpClient) {
return new MyService(http);
}
providers: [{
provide: MyService,
useFactory: MainServiceFactory,
deps: [HttpClient]
}],
此处引用 Angular dependency providers。该文档还说 useFactory
应该用于评估 运行 时间依赖性而不是静态依赖性,但我猜你在实际代码中有多个选项。
我在 app.module.ts 中实例化 MyService,并在我的代码中提供它。
但是,我希望 MyService 使用 httpClient,但我无法angular- 惯用地实例化 httpClient 作为参数传递给 MyService。我不确定在 MyService 中访问 httpClient 的正确方法是什么。
我研究过直接实例化 httpClient,然后将其作为参数传递给我的服务。然而,这似乎造成了循环依赖。我也尝试过弄乱注入器,但显然 Angular 团队特别建议不要这样做。我强烈觉得我缺少一些简单的东西。
app.module.ts
imports: [
...
httpClientModule
...
],
function MainServiceFactory() {
return new MyService();
}
...
providers: [{
provide: MyService,
useFactory: MainServiceFactory
}],
...
MyService.ts
...
constructor(private http : HttpClient) {
...
}
没有实例化并作为 httpClient 的参数传递:我自然得到一个 "error in app.module.ts, expected 1 argument"! 通过实例化,我违反了 angular 建议。
编辑: 我忽略了指定我确实导入了 httpClientModule
大家都说,你要导入HttpClientModule
查看您的代码,我认为您正在尝试处理 angular's dependency injection
:
我在 stackblitz 中做了一个例子:
https://stackblitz.com/edit/angular-yqvlv7?file=src%2Fapp%2Fapp.module.ts
我在这里定义了一个抽象class来表现得像一个接口,然后my.service
实现了这个接口。
在 app.module 中,我使用 my-service
class 提供 'interface'。做完这一切,你可以在组件中注入'interface'(在这个link,hello.component.ts)
HttpClient
只在my-service
注入,完全没有问题
希望能帮助您更好地理解它。
如 Angular API 中所述,FactoryProvider 有一个可选的 deps
字段继承自 core/FactorySansProvider。该字段是一个数组,您可以在其中放置工厂的依赖项。唯一需要的更改是:
function MainServiceFactory(http: HttpClient) {
return new MyService(http);
}
providers: [{
provide: MyService,
useFactory: MainServiceFactory,
deps: [HttpClient]
}],
此处引用 Angular dependency providers。该文档还说 useFactory
应该用于评估 运行 时间依赖性而不是静态依赖性,但我猜你在实际代码中有多个选项。