Angular 角度库-使用APP_初始值设定项将参数传递给服务

Angular 角度库-使用APP_初始值设定项将参数传递给服务,angular,angular-http-interceptors,angular-library,Angular,Angular Http Interceptors,Angular Library,我目前正在创建一个角度库(angular 7)。我需要向模块传递一些配置,还需要调用函数“loadConfig”。问题是我无法在loadConfig函数中注入配置值 如果我尝试将它添加到deps数组并向函数添加一个参数,我将得到一个nullinjector错误 我尝试添加一些控制台日志,在forRoot方法中,我获得了配置的值,在SomeService中,我还获得了正确的配置值。在loadConfig中,我总是将配置设置为未定义。使用控制台日志,我发现forRoot方法是在loadConfig之

我目前正在创建一个角度库(angular 7)。我需要向模块传递一些配置,还需要调用函数“loadConfig”。问题是我无法在loadConfig函数中注入配置值

如果我尝试将它添加到deps数组并向函数添加一个参数,我将得到一个nullinjector错误

我尝试添加一些控制台日志,在forRoot方法中,我获得了配置的值,在SomeService中,我还获得了正确的配置值。在loadConfig中,我总是将配置设置为未定义。使用控制台日志,我发现forRoot方法是在loadConfig之前执行的,所以我不明白为什么它不工作

你能帮帮我吗

export function loadConfig() {
  //some code
  //if I add config as a parameter, the config here is undefined
}

    export class SomeModule {
  public static forRoot(config: any): ModuleWithProviders {
    //if I console log here config is populated
    return {
      ngModule: SomeModule,
      providers: [
        SomeService,
        {
          provide: "config",
          useValue: config,
        },
        {
          provide: APP_INITIALIZER,
          useFactory: loadConfig,
          deps: [], //tried adding config here but get nullinjector error
          multi: true,
        }

      ],
    };
  }
}

export class SomeService {
    constructor(@Inject("config") private config: any) {
        //the config here is populated
    }
}

我看不出你的代码中有任何主要的问题

我建议您使用存储在全局变量中的
InjectionToken

这段代码对我来说就像一个符咒:

export const CONFIG_TOKEN=new InjectionToken('APP_CONFIG');
导出函数initConfig(配置:any){
return()=>{…}
}
导出类模块{
publicstaticforroot(配置:any):ModuleWithProviders{
返回{
ngModule:SomeModule,
供应商:[
{
提供:CONFIG_令牌,
useValue:config,
},
{
提供:应用程序初始化器,
useFactory:initConfig,
deps:[配置令牌],
多:是的,
}
]
};
}
}

您的代码看起来不错,请参阅我的答案。但是在
deps
中,您是否将令牌“config”作为字符串或配置值传递。这可能是个问题。为了避免任何混淆,请创建一个全局注入令牌。