Да, вы можете сделать это, используя @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]
};
Документы здесь