角度 DI:将值令牌注入工厂提供程序



是否可以将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
]
)

然而,角度是在configDataServiceProvider"host"上注入的,而不是"host-allianz"

有什么想法吗?

是的,您可以使用如下所示@Inject装饰器来执行此操作,这将帮助您从 DI 容器中提取相关依赖项。

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

您也可以考虑以下选项。基本上所有注册InjectionToken都可以从应用程序Injector中检索,这可以通过在实例上调用get方法并传递InjectorToken名称来实现injector

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]
};

文档在这里

相关内容

最新更新