在 Angular2+ 中,什么时候设置静态变量?

In Angular2+, when are static variables set?

假设我在 Angular 5 中有一项看起来像

的服务
@Injectable()
export class CognitoUtil {

    constructor(
        private anotherService: AnotherService
    ) {}

    public static GREETING = "Howdie Partner";

}

变量GREETING的生命周期是多少?

什么时候设置?它是在应用程序被加载之前就被设置的吗(在我看来是这样)?无论如何在它运行之前发生一些事情 - 例如,将可能影响最终给定值的其他值设置为 GREETING?

我非常希望能对此做出一些澄清。

谢谢!

首先,我认为你对 "When is it set" 的看法是正确的。

其次,在我看来,你不应该在服务中使用静态变量,因为你违反了依赖注入模式。

如果一定要用,我觉得你可以试试Angular提供的APP_INITIALIZER。

例如:

import { HttpClientModule } from "@angular/common/http";

import { CognitoService } from './cognito.service';
import { AnotherService } from './another.service';

export function init_app(anotherService : AnotherService ) {
    return () => {
        CognitoService.GREETING = anotherService.someValue;
    };
}

@NgModule({
  imports: [HttpClientModule],
  providers: [
    AnotherService,
    CognitoService,
    { provide: APP_INITIALIZER, useFactory: init_app, deps: [AnotherService], multi: true }
  ]
})
export class AppLoadModule { }