我正在尝试使用 openapi-generator-cli 从 v2 swagger 文件生成 API 客户端。为此,我使用了 openapi-generator-cli 的 docker 容器,它将其版本报告为“4.1.0-SNAPSHOT”。
代码生成适用于以下选项:
{
"npmName": "...",
"npmVersion": "0.0.3",
"snapshot": true,
"ngVersion": "8.1.1"
}
而且我也尝试将providedInRoot
选项设置为true。
但是,生成的服务类没有使用@Injectable
装饰器进行注释。所以在我的组件中导入它们并在组件的构造函数中添加服务后,我无法使用它们。这就是我的组件的样子:
import { Component, OnInit } from '@angular/core';
import { UsersService, User } from '...'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(userService: UsersService) {}
title = 'user-frontend';
ngOnInit() {
this.userService.listUsers();
}
}
失败,因为 userService 在 AppComponent 的范围内不存在。
这就是我导入生成的模块的方式:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { ApiModule } from '...';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ApiModule,
HttpClientModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
关于生成 api 客户端时我的错误在哪里的任何想法?
编辑: 生成的代码如下所示:
@Injectable({
providedIn: 'root'
})
export class UsersService {
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, @Optional() configuration: Configuration) {
if (configuration) {
this.configuration = configuration;
this.configuration.basePath = configuration.basePath || basePath || this.basePath;
} else {
this.configuration.basePath = basePath || this.basePath;
}
this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
}
...
}