Angular DI: введение токена значения в провайдер фабрики - PullRequest
0 голосов
/ 07 июня 2018

Можно ли внедрить InjectionToken в провайдера фабрики:

В настоящее время я написал следующее:

export const HOST_TOKEN = new InjectionToken<string>("host");

let configDataServiceFactory = (userService: UserService, host: string) => {
    return new Config("host", 8080, userService.getUser(), userService.getPasswd());
};

export let configDataServiceProvider =
{
    provide: CONFIG_API,
    useFactory: configDataServiceFactory,
    deps: [UserService, HOST_TOKEN]
};

В мой модуль:

@NgModule(
  providers: [
    {provide: HOST_TOKEN, useValue: "allianz-host"},
    configDataServiceProvider
  ]
)

Тем не менее, angular вводит configDataServiceProvider значение "host" вместо "host-allianz"

Есть идеи?

1 Ответ

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

Да, вы можете сделать это, используя @Inject декоратор, как показано ниже, который поможет вам извлечь соответствующую зависимость из контейнера DI.

let configDataServiceFactory = (userService: UserService, @Inject(HOST_TOKEN) host: string) => {
    return new Config(host, 8080, userService.getUser(), userService.getPasswd());
};

Также вы можете рассмотреть вариант ниже.,В основном все зарегистрированные InjectionToken будут доступны для извлечения из приложения Injector, чего можно достичь, вызвав метод get для injector экземпляра и передав InjectorToken имя.

export const HOST_TOKEN = new InjectionToken<string>("host");

let configDataServiceFactory = (userService: UserService, injector: Injector) => {
    let host = injector.get(HOST_TOKEN); //retrieved token from injector
    return new Config(host, 8080, userService.getUser(), userService.getPasswd());
};

export let configDataServiceProvider =
{
    provide: CONFIG_API,
    useFactory: configDataServiceFactory,
    deps: [UserService, Injector]
};

Документы здесь

...