IConfiguration aus ServiceCollection abrufen

8

Ich schreibe meine eigene Erweiterungsmethode für ServiceCollection , um die Typen meines Moduls zu registrieren, und ich muss auf die IConfiguration -Instanz von der Sammlung zugreifen, um meine Optionen zu registrieren.

Erweiterungsmethode

%Vor%

Ist dies der richtige Weg, um die IConfiguration -Instanz aus der Sammlung zu holen, oder gibt es eine elegantere Lösung? Ich möchte die IConfiguration-Instanz nicht als Parameter zur Methode hinzufügen.

    
Jehof 18.08.2017, 07:34
quelle

2 Antworten

1

Nach den Kommentaren habe ich meine Erweiterungsmethode so geändert, dass es Sache des Composers der Anwendung ist, den Konfigurationsbereich für meine Optionen anzugeben.

%Vor%

aus der StartUp-Klasse, sieht der Aufruf wie

aus %Vor%

Die Entscheidung, es auf diese Weise zu verwenden, geschieht hauptsächlich durch diese Kommentare. Dieser Weg ist vielleicht relevanter, wenn Sie Komponenten entwickeln, die von vielen Entwicklern verwendet werden, als für eine interne Komponente, die Sie in Ihrer Anwendung verwenden.

  

Imho ist ein schlechtes Design, um von überall auf IConfiguration zuzugreifen   innerhalb des Kompositionswurzels (Startup-Klasse für ASP.NET-Core), wie dies   Impliziert, dass die Konfigurationsdatei eine bestimmte Struktur haben muss   das kann überhaupt nicht geändert werden. Stattdessen würde ich eine Erweiterungsmethode schreiben   Konfigurieren Sie die Konfig-Klassen im Composition-Root und übergeben Sie a   IConfiguration-Objekt zu, ähnlich wie   .Configure (Konfiguration.GetSection ("MyLibConfi g").   Auf diese Weise wird der Entwickler, der seine Anwendung von Ihrem erstellt   Komponenten können entscheiden, wo sie innerhalb der appsettings.json platziert werden sollen

     

Oder wie würdest du Konflikte lösen, wenn zwei Bibliotheken direkt sind   referenziere die IConfiguration und habe den gleichen Abschnitt innerhalb der   Konfig? d.h. JsonSettings, aber haben eine völlig andere Struktur? Es   kann nur gelöst werden, indem man den Entwickler, der es komponiert, wählen lässt und   Übergeben Sie den Namen des Abschnitts an Ihre Erweiterungsmethode, die den   Optionen über .Configure

    
Jehof 21.08.2017, 07:34
quelle
1

Ich habe meinen eigenen "service collection" -Typ erstellt, der die IServiceCollection und IConfiguration umhüllt und alle meine Module diesen Typ verwenden, um ihre Dienste zu registrieren. Zum Beispiel:

%Vor%

Dann müssen Sie eine Erweiterungsmethode mit der Konfigurationsinstanz als Parameter erstellen, die die Implementierung für IMyServiceCollection erstellt, z. B .:

%Vor%

Beachten Sie, dass wir dies in einem modularen Rahmen verwenden. Für einfache Anwendungen ist das Overkill.

Ich denke, dass Ihre Lösung auch in Ordnung ist. Wenn Sie jedoch häufig Zugriff auf die IConfiguration -Instanz benötigen, können Sie in der Servicesammlung immer wieder mühsam nach ihnen suchen.

    
Henk Mollema 18.08.2017 07:58
quelle