angular - Angular APP_INITIALIZER 工厂中的 InjectionToken
问题描述
我正在尝试APP_INITIALIZER
在我的 Angular 10 应用程序中创建一个,其中工厂有多个依赖项。一个依赖项是InjectionToken<string>
,但我不能像使用构造函数那样注入它。我得到:
错误...
装饰器在此处无效。
以下是如何重现此行为(另请参阅此 StackBlitz 示例):
export const FOOBAR = new InjectionToken<string>('FOOBAR');
@Injectable({providedIn: 'root'})
export class FooService { dummy = 'value'; }
function initializerFactory(
fooService: FooService,
@Inject(FOOBAR) fooBar: string,
) {
return () => {
fooService.dummy = `Changed ${fooService.dummy}, added ${fooBar}`;
}
}
然后在app.module
:
providers: [
{ provide: FOOBAR, useValue: 'token value' },
{ provide: APP_INITIALIZER, useFactory: initializerFactory, multi: true, deps: [FooService, FOOBAR] },
],
如何使用 AngularInject
将令牌放入工厂方法?
解决方案
只需删除@Inject(...)
. 它们按照您列出它们的deps
确切顺序“神奇地”注入,作为函数的参数。
所以这:
{
provide: APP_INITIALIZER,
useFactory: initializerFactory,
multi: true,
deps: [FooService, FOOBAR]
},
将FooService
作为第一个参数和FOOBAR
第二个参数注入您的工厂。
推荐阅读
- reactjs - 当这些元素位于具有更高 z-index 的 div 下时,如何使用 testing-library 的 findByText() 查找元素?
- html - 如何定位其他所有图形标签?
- python - 我无法为代码创建最后 3 条规则
- typescript - 为什么 Typescript 不能在赋值中使用泛型的 keyof 类型并将其泛化为字符串?
- gatsby - 了解部署和挂钩
- java - 获取运营商姓名sim卡
- php - 我无法连接到 clearDB laravel heroku
- javascript - JavaScript 函数执行 consol.log(var) 但不执行 var2 = var
- python - PEP 476 会影响非 TLS 连接吗?
- python - json文件到jinja2模板python