如何将服务接口注入Nestjs中控制器的构造函数中?

如何将服务接口注入Nestjs中控制器的构造函数中?,nestjs,Nestjs,我有一个应用程序,它接收一个依赖于控制器的服务,到目前为止还不错,但我想找到一种方法,不声明该服务的具体实现,而是能够从控制器“询问”该服务实现的接口,以解耦该服务的具体实现。在nest js中是如何做到这一点的?要做到这一点,您必须为接口创建注入令牌,并在注入服务时使用@Inject()装饰器和注入令牌。然后在您的模块中,您可以声明为该注入令牌提供哪个实现 下面是一个简单的问候服务接口和我们的注入令牌,将在将我们的服务注册为提供者时使用 问候语-service.interface.ts 现在,

我有一个应用程序,它接收一个依赖于控制器的服务,到目前为止还不错,但我想找到一种方法,不声明该服务的具体实现,而是能够从控制器“询问”该服务实现的接口,以解耦该服务的具体实现。在nest js中是如何做到这一点的?

要做到这一点,您必须为接口创建注入令牌,并在注入服务时使用
@Inject()
装饰器和注入令牌。然后在您的模块中,您可以声明为该注入令牌提供哪个实现

下面是一个简单的问候服务接口和我们的注入令牌,将在将我们的服务注册为提供者时使用

问候语-service.interface.ts 现在,当我们注入服务时,我们可以将
@inject()
装饰器与注入令牌一起使用。您在我们的
问候模块
中提供给
useClass
的任何实现都将被注入

greeting.controller.ts
从'@nestjs/common'导入{Controller,Get,Inject,Query};
从“../services/GREETING SERVICE.interface”导入{GREETING_SERVICE,IGreetingService};
@控制器(“问候语”)
导出类迎宾控制器{
建造师(
@注入(问候服务)
私人只读问候服务:IGreetingService
) {}
@得到()
公共异步getGreeting(@Query('name')name:string):承诺{
返回等待此消息。_问候服务。问候(姓名| | |'约翰');
}
}


为此,您必须为接口创建注入令牌,并在注入服务时将
@Inject()
装饰器与注入令牌一起使用。然后在您的模块中,您可以声明为该注入令牌提供哪个实现

下面是一个简单的问候服务接口和我们的注入令牌,将在将我们的服务注册为提供者时使用

问候语-service.interface.ts 现在,当我们注入服务时,我们可以将
@inject()
装饰器与注入令牌一起使用。您在我们的
问候模块
中提供给
useClass
的任何实现都将被注入

greeting.controller.ts
从'@nestjs/common'导入{Controller,Get,Inject,Query};
从“../services/GREETING SERVICE.interface”导入{GREETING_SERVICE,IGreetingService};
@控制器(“问候语”)
导出类迎宾控制器{
建造师(
@注入(问候服务)
私人只读问候服务:IGreetingService
) {}
@得到()
公共异步getGreeting(@Query('name')name:string):承诺{
返回等待此消息。_问候服务。问候(姓名| | |'约翰');
}
}

// This will be our injection token.
export const GREETING_SERVICE = 'GREETING SERVICE';

export interface IGreetingService {
  greet(name: string): Promise<string>;
}