Angular APP_INITIALIZER提供程序获得了一个未定义的注入服务,但其他注入情况很好

问题描述 投票:0回答:1
基本上,我有一个在应用程序初始化时运行的提供程序。一项服务可以正常注入,但另一项返回未定义。我尝试在它们的两个构造函数上放置console.log语句,并且它们都在提供程序之前运行,所以我不知道为什么当我尝试使用它们时,只有其中一个未定义。

感谢所有帮助。

这是我的代码。如果您需要更多,请告诉我。

AppModule

@NgModule({ declarations: [ // ... ], entryComponents: [ // ... ], imports: [ // ... ], providers: [ AppProvider, // ... { provide: APP_INITIALIZER, useFactory: (provider: AppProvider) => () => provider.load(), deps: [AppProvider], multi: true }], bootstrap: [AppComponent] }) export class AppModule { }

AppProvider

@Injectable({providedIn: 'root'}) export class AppProvider { constructor( // ... private participantService: ParticipantService, private dstService: DSTService) { } load() { //... console.log(participantService); // prints undefined console.log(dstService); // prints the service // ... return Promise.resolve(); } }

ParticipantService

@Injectable({providedIn: 'root'}) export class ParticipantService { // ... constructor(private http: HttpClient, // ... private router: Router){ } // ... }

DSTService

@Injectable({providedIn: 'root'}) export class DSTService{ // ... constructor(private http: HttpClient, private participantService: ParticipantService, // ... private router: Router){ } // ... }

提前感谢
angular dependency-injection angular6 angular7 angular8
1个回答
0
投票
很抱歉误导您。 inject函数似乎只注入令牌。因此,我们可以使用INJECTOR令牌将服务注入程序注入到我们的令牌中。这样就变成了……:

import { SOME_TOKEN } from "./token"; import { NgModule, inject, INJECTOR } from "@angular/core"; @NgModule({ imports: [BrowserModule, FormsModule], declarations: [AppComponent, HelloComponent], bootstrap: [AppComponent], providers: [ HelloService, { provide: SOME_TOKEN, useFactory: () => { return inject(INJECTOR) .get(HelloService) .getHello(); } } ] }) export class AppModule {}

这里是有效的Stackblitz示例。
© www.soinside.com 2019 - 2024. All rights reserved.