【发布时间】:2021-12-31 23:06:46
【问题描述】:
我正在尝试在nest.js 中实现一个全局模块
我已经创建了如下所示的服务
export interface ConfigData {
DB_NAME: string;
}
@Injectable()
export class ConfigManager {
private static _instance?: ConfigManager;
public static configData:ConfigData | null;
private constructor() {
console.log(ConfigManager)
if (ConfigManager._instance)
ConfigManager._instance = this;
else{
ConfigManager._instance = new ConfigManager()
ConfigManager.configData = <ConfigData|null><unknown>ConfigManager.fetchSecretData()
}
}
private static async fetchSecretData():Promise<ConfigData|null>{
// some data from db
}
// static get instance() {
// return ConfigManager._instance ?? (ConfigManager._instance = new ConfigManager());
// //return ConfigManager._instance ?? (ConfigManager._instance = ConfigManager.fetchSecretData()) //new ConfigManager());
// }
}
configuration.module.ts
@Global()
@Module({
providers: [ConfigManager],
exports: [ConfigManager],
})
export class ConfigurationModule {}
并在 app.module.ts 中添加 ConfigurationModule 导入。
还在服务上添加私有构造函数,无法将其添加到 module.ts 文件中。
我希望我应该能够在任何地方configData 而无需导入 ConfigManager。但它不起作用......
ConfigManager 在没有导入的情况下不可用。
【问题讨论】:
-
你是如何尝试使用
ConfigManager的? -
我想像 ConfigManager 一样访问。此类的属性.. 但问题是 ConfigManager 不导入就无法访问
-
没有像
import { ConfigManager } from './config-manager.provider.ts这样的导入? -
是的,我喜欢将它添加到全局并且可以像 ConfigManger.someproperty 一样简单地访问
-
好吧,要分配给全局变量,您只需要执行
globals.ConfigManager = ConfigManager。也就是说,我强烈建议不要使用全局变量,因为它们不能提供清晰性并且最终会开始混淆
标签: javascript typescript nestjs