Да, внедрение сторонних зависимостей в качестве пользовательских провайдеров - это путь. Вы можете использовать асинхронную фабричную функцию для внедрения зависимостей, необходимых для конфигурации установки. Таким образом, у вас будет уже настроенный экземпляр.
Это пример того, что я недавно сделал:
import { Telegraf } from 'telegraf';
// ...
providers: [
{
provide: Telegraf,
useFactory: async (configService: ConfigService) => {
return new Telegraf(configService.telegramToken);
},
inject: [ConfigService],
},
]
В зависимости от ваших требований, возможно, имеет смысл создать новый модуль для вашей зависимости, который реэкспортирует вашего провайдера. Вместо непосредственного экспорта своего стороннего экземпляра вы также можете создать фасадный сервис, который инкапсулирует зависимость. Таким образом, в более поздний момент становится проще обменивать библиотеку.