Angular 2 как передать конфиг провайдеру из app.module.ts - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь сделать Angular 2 сервис с файлом конфигурации, переданным через конструктор, чтобы я мог прочитать конфигурацию после ее инициализации и запустить другую часть кода. Я пытаюсь заставить файл конфигурации в app.module.ts и через провайдера использовать фабрику, чтобы передать его моему сервису, но мне не повезло, я застрял в поиске ответов Google, но не могу найти правильное решение , Мой код ниже, я создал конфиг

app.module.ts

const config = new AuthServiceConfig([
  {
    id: FacebookLoginProvider.PROVIDER_ID,
    provider: new FacebookLoginProvider(),
  },
  {
    id: LinedinLoginProvider.PROVIDER_ID,
    provider: new LinedinLoginProvider(),
  },
]);

export function provideConfig() {
  return config;
}
export function configFactory(config: AuthServiceConfig) {
  return config;
}
 providers: [
     ...
    { provide: AuthServiceConfig, useFactory: provideConfig },
    { provide: AuthProvider, useFactory: config },
  ],

auth.ts

    export interface AuthServiceConfigItem {
  id: string;
  provider: Provider;
}
export class AuthServiceConfig {
  providers: Map<string, Provider> = new Map<string, Provider>();

  constructor(providers: AuthServiceConfigItem[]) {
    for (let i = 0; i < providers.length; i++) {
      let element = providers[i];
      this.providers.set(element.id, element.provider);
    }
  }
}

@Injectable()
export class AuthProvider {
  private static readonly ERR_LOGIN_PROVIDER_NOT_FOUND =
    'Login provider not found';
  providers: Map<string, Provider> = new Map<string, Provider>();

  constructor(config) {
    this.providers = config.providers;
    console.log('Ovo su providersi u konstruktoru', this.providers);
  }

1 Ответ

0 голосов
/ 30 июня 2018

Я не пробовал динамически менять поставщиков, но я использовал файлы среды Angular CLI. Основываясь на некотором флаге из файла окружения, я бы создал соответствующий сервис в фабричной функции.

Взгляните на app.module.ts и product.factory.ts здесь: https://github.com/Farata/angulartypescript/tree/master/code-samples/Angular6/chapter5/di-samples/src/app/factory

...