Angular 17独立项目引入生成的SDK触发NG0203注入上下文错误
Angular 17独立项目中OpenAPI生成SDK的NG0203错误问题
场景说明
我有一个极简的Angular 17独立项目,用来测试通过OpenAPI生成的typescript-angular客户端SDK。openapi.json规范文件放在另一个项目里,通过npm link把Angular库的dist包链接到这个前端项目,前端是用ng new创建的新项目,只导入了这个链接的SDK包。
SDK生成命令
npx openapi-generator-cli generate -i openapi.json -g typescript-angular -o projects/lorikeet-identity-sdk/src/lib/ --additional-properties fileNaming=kebab-case --generate-alias-as-model
前端app.config.ts配置
import { ApiModule, Configuration, ConfigurationParameters, } from 'identity-sdk'; export function apiConfigFactory(): Configuration { const params: ConfigurationParameters = { basePath: 'https://identity.dev', }; return new Configuration(params); } export const appConfig: ApplicationConfig = { providers: [ importProvidersFrom(ApiModule.forRoot(apiConfigFactory)), provideRouter(routes), provideClientHydration(), provideAnimations(), provideHttpClient(), ], };
问题点
SDK里的服务已经标记了@Injectable({ providedIn: 'root' }),但运行ng serve时还是抛出了NG0203错误。
SDK服务示例代码
@Injectable({ providedIn: 'root', }) export class MachineService { protected basePath = 'http://localhost'; public defaultHeaders = new HttpHeaders(); public configuration = new Configuration(); public encoder: HttpParameterCodec; constructor( protected httpClient: HttpClient, @Optional() @Inject(BASE_PATH) basePath: string | string[], @Optional() configuration: Configuration ) { // 省略内部逻辑 } // 省略其他方法 }
运行时错误信息
RuntimeError2: NG0203: inject()必须在注入上下文中调用,比如构造函数、工厂函数、字段初始化器,或者使用`runInInjectionContext`包裹的函数中。 at injectInjectorOnly (e:/git/LorikeetSolutions/LorikeetTypescriptAngularSDK/node_modules/@angular/core/fesm2022/core.mjs:1093:15) at ɵɵinject (e:/git/LorikeetSolutions/LorikeetTypescriptAngularSDK/node_modules/@angular/core/fesm2022/core.mjs:1106:42) at Object.ApiModule_Factory (e:/git/LorikeetSolutions/LorikeetTypescriptAngularSDK/projects/lorikeet-identity-sdk/src/lib/api/machine.service.ts:45:14) at Object.factory (e:/git/LorikeetSolutions/LorikeetDashboardTest/node_modules/@angular/core/fesm2022/core.mjs:3322:38) at eval (e:/git/LorikeetSolutions/LorikeetDashboardTest/node_modules/@angular/core/fesm2022/core.mjs:3219:47) at runInInjectorProfilerContext (e:/git/LorikeetSolutions/LorikeetDashboardTest/node_modules/@angular/core/fesm2022/core.mjs:866:9) at R3Injector.hydrate (e:/git/LorikeetSolutions/LorikeetDashboardTest/node_modules/@angular/core/fesm2022/core.mjs:3218:21) at R3Injector.get (e:/git/LorikeetSolutions/LorikeetDashboardTest/node_modules/@angular/core/fesm2022/core.mjs:3082:33) at injectInjectorOnly (e:/git/LorikeetSolutions/LorikeetDashboardTest/node_modules/@angular/core/fesm2022/core.mjs:1100:40) at ɵɵinject (e:/git/LorikeetSolutions/LorikeetDashboardTest/node_modules/@angular/core/fesm2022/core.mjs:1106:42) { code: -203 }
内容的提问来源于stack exchange,提问作者JasperDaDolphin
相关产品推荐
相关产品推荐

