inject() 必须从注入上下文调用,例如构造函数、工厂函数、字段初始值设定项

问题描述 投票:0回答:1

我有一个超级简单的 Angular 17 独立项目来测试生成的 typescript-Angular 客户端 sdk。

我的 openapi.json 规范非常基本,位于另一个项目中 我将 Angular 库 dist 与 npm 链接链接到前端。 前端是一个使用 ng new 的新项目,仅导入 npm 链接的包。

命令:

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',
})
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
  ) {
...
   }
...
}

ng 服务出错

RuntimeError2: NG0203: inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`. Find more at https://angular.io/errors/NG0203
    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
angular openapi openapi-generator
1个回答
0
投票

我也有同样的问题。对我来说,改变

angular.json
中的“构建器”似乎可以解决问题:

"builder": "@angular-devkit/build-angular:browser",

致:

 "builder": "@angular-devkit/build-angular:browser-esbuild",

"builder": "@angular-devkit/build-angular:application",

我有一个很大的代码库,它需要一些认真的重构和测试,所以它绝对不理想。

我很好奇为什么它一开始就不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.