在Ivy的帮助下,Angular推出了不错的inject
function。根据文档,该函数可以“从提供商的工厂”使用,并附带以下示例:
providers: [
{
provide: Car,
useFactory: () => {
// OK: a class factory
const engine = inject(Engine);
return new Car(engine);
}
}
]
这让我相信我现在可以转换我的旧APP_INITIALIZER
s:
providers: [
{
provide: APP_INITIALIZER,
useFactory: (engine: Engine) => () => engine.start(),
deps: [Engine],
multi: true
}
]
使用inject
函数来做一些简单的事情,像这样:
providers: [
{
provide: APP_INITIALIZER,
useFactory: () => () => inject(Engine).start(),
multi: true
}
]
但是,这样做会失败,并显示以下错误消息:
错误:NG0203:inject()必须从注入上下文调用,例如构造函数、工厂函数、字段初始化器或用于EnvironmentInjector#runInContext
的函数。
当使用APP_INITIALIZER
时,它是否不再是工厂上下文?或者这里有什么问题?
1条答案
按热度按时间o2gm4chl1#
看起来像一个缺失的功能,上下文只存在于顶级函数中。
这是一个工作示例:
或者