Website-Suche

node.js - NestJS: Wie injiziert man einen Service in einen Provider aus demselben Modul?


Ist es möglich, einen Dienst in einen Factory-Provider aus demselben Modul zu injizieren? Ich habe einen Dienst AppService, den ich in diesem Factory-Provider unten verwenden möchte.

Hier ist mein Code:

app.module.ts
@Module({
  imports: [
    MongooseModule.forFeatureAsync([
        {
            name: 'List',
            imports: [AnotherModule],
            useFactory: (anotherService: AnotherService) => {
                const schema = ListSchema;
                schema.pre('save', function() {
                    // Validate
                })
                return schema;
            },
            inject: [AnotherService],
        },
  ],
  providers: [AppService],
  exports: [AppService],
})
export class AppModule {}

Ich möchte in der Lage sein, so etwas zu tun:

app.module.ts
@Module({
  imports: [
    MongooseModule.forFeatureAsync([
        {
            name: 'List',
            imports: [AnotherModule, AppModule],
            useFactory: (anotherService: AnotherService, appService: AppService) => {
                const schema = ListSchema;
                schema.pre('save', function() {
                    // Validate
                })
                return schema;
            },
            inject: [AnotherService, AppService],
        },
  ],
  providers: [AppService],
  exports: [AppService],
})
export class AppModule {}

Das funktioniert nicht. Nest kann nicht alle Abhängigkeiten initialisieren und die Anwendung läuft nicht.

Ist es überhaupt möglich, so etwas zu tun?

Wie kann ich einen Dienst aus demselben Modul in diesen Factory-Provider injizieren? Eine Lösung wäre, diesen Dienst in ein anderes Modul zu verschieben und dann diesen Dienst zu injizieren. Ich würde dies jedoch nach Möglichkeit vermeiden.

Antwort #1

Es ist nicht möglich, einen Dienst aus dem aktuellen Modul in ein Modul hinzuzufügen, das das aktuelle Modul als Teil seines Bootstraps importiert, da dies eine große zirkuläre Abhängigkeit zwischen den beiden darstellen würde. Möglicherweise können Sie dies mit einigen interessanten forwardRef()-Funktionen umgehen, aber insgesamt sollte eine solche Art von Muster vermieden werden, da sie Verwirrung in den Code einbringt.

Verwandte Artikel