Предполагая, что вы хотите использовать один и тот же экземпляр ConfigService
... С точки зрения гнезда JS , я вижу два варианта:
- Группировать ваши
util
функционирует в одном провайдере и рассматривается как le git компонент вашего приложения Nest JS (или сгруппируйте их по обязанностям в нескольких провайдеров, это также может иметь больше смысла) - Make ваша служба конфигурации доступна в виде node.js модуля, который вы можете импортировать «как есть» из
util
и объявить как пользовательский Provider
из вашего приложения Nest JS.
Относительно вторая опция:
// regular typescript class
// exported so you can type your injected "configService" in other classes
export class ConfigService {
// your code
}
export default new ConfigService();
Это можно импортировать как * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 101: 1019 *. * *
. * При введении ConfigService
в ваше приложение Nest JS значение будет разрешено до configService
(если, конечно, ConfigModule
находится в области видимости).
Однако , это не позволяет вашему ConfigService
вводить что-либо в параметры его конструктора ... Если вы не правы Можно использовать два разных экземпляра ConfigService
(один для util
, один для вашего приложения Nest JS). В этом случае вы можете использовать провайдера Factory, который выглядит следующим образом:
const configServiceProvider = {
provide: ConfigService,
useFactory: (somethingService: SomethingService) => new ConfigService(somethingService),
inject: [SomethingService],
};
// and in the ConfigModule
@Module({
imports: [SomethingModule], // so you can inject SomethingService
providers: [configServiceProvider],
exports: [configServiceProvider],
})
export class ConfigModule {}
Но это не имеет особого смысла, так как вам также понадобятся зависимости ConfigService
available out области действия Nest JS, чтобы использовать его в util
функциях.
Другой вариант (не принимая во внимание какие-либо рамки) будет состоять в том, чтобы позволить себе проходить (по параметру ) ConfigService
в вашем util
... например:
// old version
export const readDeploymentConfigFile = (filePath: string) => {
// ...
};
// new version
export const readDeploymentConfigFile = (configService: ConfigService) => (filePath: string) => {
// ...
};
Это видео может быть вдохновляющим ("Dead-Simple Inpendency Injection" Рунара Шли Бьярнасона , 2012), даже если это не относится ни к TypeScript, ни к Nest.
Но это не идеально для использования в качестве API, и это может также выявить некоторый дизайн fl aws ... Если ваш util
функциям нужны некоторые динамические / внешние значения конфигурации, можем ли мы все еще рассматривать их как util
функции?