typescript - NestJS UsersModule bağımlılıkları çözülemiyor
NestJS UsersModule bağımlılıklarını çözemiyor. Hata:
Hata: Nest, UsersModule'ün (?) bağımlılıklarını çözemiyor. Lütfen [0] argümanının mevcut bağlamda kullanılabilir olup olmadığını doğrulayın.
app.module.ts:
@Module({
imports: [
ConfigModule,
DatabaseModule,
GraphQLModule,
UsersModule,
],
providers: [
ErrorService,
],
exports: [
DatabaseModule,
ErrorService,
],
})
export class AppModule implements NestModule {}
users.module.ts:
@Module({
imports: [
DatabaseModule,
ErrorService,
],
providers: [
UsersService,
...usersProviders,
UserResolver,
],
})
export class UsersModule {
constructor(private readonly errorService: ErrorService) {}
}
Sorun bu ErrorService ile ilgili, ama örneğin Database modülü benzer şekilde kullanılıyor ve herhangi bir hata olmadan çalışıyor. Biraz kafam karıştı) Belki birisi yardımcı olur. Teşekkürler.
Cevap #1
ErrorService, UsersModule içinde düzgün bir şekilde enjekte edilmedi.
Ya şu şekilde olmalı:
UsersModuleiçindekiproviders- Bir modülün
exportskısmındaUsersModuletarafındanimportedilen
Aksi takdirde, Nest bunu çözemeyecektir. Ve bunu AppModule’ün exports bölümüne eklemek de onu global olarak kullanılabilir hale getirmez.
Üç çözüm görebiliyorum:
- 1 -
UsersModuleiçindeproviderskısmınaErrorServiceeklemek. Ama bu uygun bir yol gibi görünmüyor, çünkü bence/tahminime göre bu servisi kodun birçok başka kısmında yeniden kullanacaksınız (doğru mu?). Bu yüzden, daha iyi: - 2 -
ErrorService'iexportseden birErrorsModuleoluşturun, ardındanUsersModuleErrorsModule'üimportedecek ve servisi enjekte edebilecek.
Beğen :
// errors.module.ts
@Module({
providers: [ ErrorService ],
exports: [ ErrorService ],
})
export class ErrorsModule {}
// users.module.ts
@Module({
imports: [ErrorsModule],
})
export class UsersModule {
constructor(private readonly errorService: ErrorService) {}
}
- 3 - Eğer servisinizin yeniden kullanılmak üzere tasarlanması gerekiyorsa (tahminim doğruysa
LoggerServicedaha iyi bir isim olur mu?), yalnızca ana modülünüzde (AppModule)importedeceğiniz bir@Globalmodül kullanabilirsiniz
Örnek :
@Global()
@Module({
providers: [LoggerService],
exports: [LoggerService],
})
export class LoggerModule {
constructor(private readonly loggerService: LoggerService) { /* initialize logger, or whatever */ }
}
O zaman AppModule'ün imports'una LoggerModule'ü eklemelisiniz ve LoggerService, yeniden bildirime gerek duymadan her yerde enjekte edilebilir olacaktır.
