为 Angular 库中的单例服务提供配置

问题描述 投票:0回答:1

我想在我的 Angular 库中使用

provideIn: 'root'
选项提供服务(该服务用于消费者应用程序)。但是,我也想为其提供一些配置(例如
forRoot / forChild / withConfig
模式)。

有什么办法可以实现这个目标吗?

angular dependency-injection singleton
1个回答
0
投票

可以通过创建注入令牌来提供配置。它将在服务中被读取。令牌本身可以通过为其提供新值或通过创建配置它的辅助函数来配置。

示例:

  1. 在库中创建注入令牌并将其导出:
interface Settings {
// some settings
}

// provide default settings if necessary
const defaultSettings: Settings = {
// some settings
};

export const SERVICE_SETTINGS = new InjectionToken<Settings>('service-settings', {providedIn: 'root', factory() {
    return defaultSettings
}})
  1. 将这些设置注入服务:
@Injectable({providedIn: 'root'})
export class SomeService {
  settings = inject(SERVICE_SETTINGS);

  // some logic
}

3.1。您可以在 AppModule(或任何其他模块)中提供注入令牌值:

@NgModule({
  providers: [
    // other providers
    {provide: SERVICE_SETTINGS, useValue: {someValue: 1}}
  ]
})

3.2。您还可以创建一个辅助函数来配置服务。在库中创建此函数并将其导出:

export function provideServiceConfiguration(settings: Settings) {
  return makeEnvironmentProviders([
    { provide: SERVICE_SETTINGS, useValue: settings },
  ]);
}

然后将其添加到您的

AppModule
或任何其他模块或
bootstrapApplication
或子组件树中:

@NgModule({
  providers: [provideServiceConfiguration(globalOptions)],
})
© www.soinside.com 2019 - 2024. All rights reserved.