我有两个类,
FilesLocalService
仅需要在开发模式下加载,FilesCloudService
仅需要在生产模式下加载
所以我做了这样的事情:
providers: [
{
provide: FilesService,
useClass:
process.env.NODE_ENV === 'development'
? FilesLocalService
: FilesCloudService,
},
//<------ This makes Nestjs always instantiate both services
FilesLocalService,
FilesCloudService
],
问题是
FilesLocalService
和 FilesCloudService
都在 prod 和 dev 模式下加载
我需要Nestjs根据当前环境只实例化所需的类
另外,我需要让 Nestjs 解决这两个问题,而无需手动启动类,即通过使用
useFactory
解决 出现问题是因为我在
FilesLocalService
中添加了FilesCloudService
和exports[]
,所以我们需要提供它们。
通过从 exports[]
中删除它们,我们也可以从 providers[]
中删除它们
您可以编写一个动态模块,该模块将根据以下条件返回正确的提供程序:
export class Foo {
static register(env: 'local' | 'cloud') {
let provider;
if (env === 'local') provider = FilesLocalService;
if (env === 'cloud') provider = FilesCloudService;
return {
module: Foo,
providers: [{provide: FilesService, useClass:provider}],
exports: [FilesService],
};
}
}
然后将其导入到将使用
FilesService
提供程序的模块中:Foo.register(process.env.NODE_ENV === 'development' ? 'local' : 'cloud')