我有一个MailService
类和一个MailMockService
类,应该在开发中使用。
根据Nest documentation,它应该像这样工作:
app.module.ts
@Module({
imports: [...],
controllers: [...],
providers: [
...,
{
provide: MailService,
useClass: (process.env.NODE_ENV === 'development') ? MailMockService : MailService,
},
],
})
export class AppModule {
}
但是,它不能按预期工作。 process.env.NODE_ENV
等于'development'
,但模块仍提供类MailService
。
如何根据环境使模块提供MailMockService
?
编辑:
我这样使用服务:
import { MailService } from './mail/mail.service';
...
const mailService = new MailService();
我认为,import
绕过了MailService
中提供的MailMockService
/ Module
(在providers
数组中没有对象的情况下,代码仍然有效) 。但是如何告诉程序使用MailMockService
?
答案 0 :(得分:1)
如果您自己创建服务的实例而不是使用nest的依赖项注入,则会破坏框架的目的。
但是我如何告诉程序使用
MailMockService
?
这正是使依赖项注入如此出色的原因:您可以控制单元(类,模块等)中使用的依赖项,而无需更改这些单元本身。非常适合测试或特定于环境的情况,例如您的情况。
因此使用MailService
的类必须由框架创建,然后可以通过以下方式注入MailService
:
constructor(private mailService: MailService) {}
然后将使用providers
数组中提供的实例。
如果这不可能,那么您当然可以在使用类本身中具有逻辑(不是很好!):
const mailService = process.env.NODE_ENV === 'development'
? new MailMockService()
: new MailService();
答案 1 :(得分:0)
这是我要怎么做:
const mailerSvc = process.env.NODE_ENV === 'DEV'
? require('path/to/mock')
: require('path/to/real/thing')