[英]Nest can't resolve dependencies
无法弄清楚我的代码有什么问题。 查看错误描述的内容; 我发现事情没问题。
运行npm start
console说:
Nest无法解析DescribeService(UrlsAfipService,WsaaService,?)的依赖关系。 请确保索引[2]中的参数在ApiModule上下文中可用。
DescribeService
import { Injectable } from '@nestjs/common';
import { UrlsAfipService } from './urls-afip.service'
import { WsaaService } from './wsaa.service'
import * as soap from 'soap';
@Injectable()
export class DescribeService {
constructor (
private readonly urlsAfipService: UrlsAfipService,
private readonly wsaaService: WsaaService,
private clients: object
) {}
private createClientForService(service: string): Promise<any> {
return new Promise((resolve, reject) => {
if (this.clients[service]) {
resolve(this.clients[service])
} else {
soap.createClient(this.urlsAfipService.getService(service), (err, client) => {
if (err && !client) {
reject(err)
} else {
this.clients[service] = client;
resolve(client);
}
})
}
})
}
describe(service) {
this.wsaaService.generateToken(service).then((tokens) => {
this.createClientForService(service).then((client) => {
return client.describe()
});
}).catch((err) => {
return err.message
})
}
}
ApiModule
import { Module } from '@nestjs/common';
import { ConfigModule } from '../config/config.module';
import { ApiController } from './api.controller';
import { UrlsAfipService } from './urls-afip.service'
import { WsaaService } from './wsaa.service'
import { DescribeService } from './describe.service';
@Module({
controllers: [ApiController],
providers: [UrlsAfipService, WsaaService, DescribeService],
imports: [ConfigModule]
})
export class ApiModule {}
正如错误消息所示, DescribeService
的构造函数的第三个参数无法解析,这是:
private clients: object
nestjs中的服务(提供者)由应用程序上下文创建(实例化),从而实现依赖项注入。 您可以在不考虑其依赖性的情况下声明您需要服务。 当然,这仅在所有依赖项都在应用程序上下文中时才有效。 object
显然不是提供者,因此无法注入。 您没有指定clients
是什么,但这是您声明它的方式:
您可以在ApiModules
提供程序中提供一组客户端:
export const CLIENTS = 'clients';
@Module({
controllers: [ApiController],
providers: [
UrlsAfipService,
WsaaService,
DescribeService,
{ provide: CLIENTS, useValue: [clientA, clientB] }
],
imports: [ConfigModule]
})
export class ApiModule {}
然后你可以使用@Inject
装饰器在你的服务中注入数组:
export class DescribeService {
constructor (
private readonly urlsAfipService: UrlsAfipService,
private readonly wsaaService: WsaaService,
@Inject(CLIENTS) private clients: Client[],
) {}
有关nest的DI系统的更详细说明,请查看此答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.