我有一个超级简单的 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.json
中的“构建器”似乎可以解决问题:
"builder": "@angular-devkit/build-angular:browser",
致:
"builder": "@angular-devkit/build-angular:browser-esbuild",
或
"builder": "@angular-devkit/build-angular:application",
我有一个很大的代码库,它需要一些认真的重构和测试,所以它绝对不理想。
我很好奇为什么它一开始就不起作用。