You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:04:54