Zugriff auf die Konfiguration ohne Dependency-Injektion

9

Ich habe mich gefragt, ob es eine Möglichkeit gibt, auf Configuration (Microsoft.Extensions.Configuration) zuzugreifen, ohne die Abhängigkeitsinjektion zu verwenden. Nur Beispiele, die ich sehe, sind durch Konstruktorinjektion (IOtions verwenden oder Konfiguration direkt injizieren).

Mein Dilemma ist, dass ich eine Utility-Klasse habe - keinen Dienst -, die statische Methoden hat, um Dinge on-the-fly zu erledigen. In einigen dieser statischen Methoden möchte ich einige Eigenschaften von appsettings.json dynamisch abrufen. Da dies streng genommen eine Dienstprogrammklasse ist, möchte ich diese Klasse nicht in jede andere Klasse einfügen, die eine oder zwei Methoden aus dem Dienstprogramm verwenden muss.

Irgendwelche Ideen, wie man auf die Eigenschaften von appsettings.json ohne irgendeine Abhängigkeitsinjektion zugreifen kann.

Zur Info: Verwenden von c # und .net core 1.1

    
Los Morales 20.01.2017, 20:38
quelle

3 Antworten

4
  

Ich habe eine Dienstprogrammklasse - keinen Dienst - mit statischen Methoden

Das ist wirklich das Herz Ihres Problems. Sie haben statische Methoden mit Abhängigkeiten, die nicht DI-freundlich sind.

Ich würde argumentieren, dass Sie einen guten Kandidaten für eine Dienstleistung haben, die Sie zu einer Gebrauchsklasse gemacht haben. Als Ergebnis haben Sie sich selbst davon befreit, DI richtig zu verwenden. Machen Sie die Klasse entweder zu einer Instanzklasse oder extrahieren Sie die anwendbare Funktionalität in einen Service und Sie haben eine Möglichkeit, Ihre IOptions -abhängigkeit zu injizieren.

Sie sollten statische Klassen / Methoden für alles vermeiden, was Abhängigkeiten hat (oder wahrscheinlich hat).

    
NightOwl888 20.01.2017 23:20
quelle
4

Wow, was für viele Kommentare, warum beantworten die Leute die Frage nicht, anstatt jemandem zu sagen, dass sie nicht tun wollen, was sie offensichtlich tun. Wie auch immer, hoffentlich wird dies beide Lager zufriedenstellen.

Wenn Sie eine standardmäßige AppSettings-Klasse mit einem einzelnen öffentlichen Konstruktor verwenden, der eine ICon-Konfiguration verwendet, die zum Auffüllen aller AppSettings-Eigenschaften verwendet werden kann, bleibt die Fähigkeit zur Abhängigkeitsinjektion erhalten.

Wenn wir am Ende des Konstruktors eine statische Eigenschaft 'Current' setzen, die auf die aktuelle Instanz von AppSettings verweist, können wir von dort aus über die statische Eigenschaft auf die Einstellungen zugreifen, ohne dass weitere Injektionen erforderlich sind.

Wenn wir jetzt eine statische 'GetCurrentSettings'-Standardmethode zum Abrufen der Einstellungen aus einer JSON-Datei erstellen, kann diese als Standardinstanziierung verwendet werden. Wenn' Current 'aufgerufen wird und auf Null gesetzt ist, gehen wir einfach los und füllen Sie die Einstellungen aus der Datei. Hier ist ein Beispiel, was ich meine ...

%Vor%

Sie können also überall im Code AppSettings.Current.AppConnection

aufrufen

Wenn es mit DI instanziiert wurde, würde die injizierte Version abgerufen werden, andernfalls würde die Standardversion aus einer Datei appsettings.json stammen. Ich bezweifle, dass es alle befriedigt und ich bin mir nicht sicher, ob ich es sehr gut erklärt habe, aber hoffentlich macht es Sinn.

    
Hoots 10.11.2017 15:58
quelle
0

Ich habe gerade die config Eigenschaft in Startup static:

gemacht %Vor%

Jetzt kann ich überall in der Anwendung mit nur Startup.Configuration darauf zugreifen.

    
ProfK 09.03.2018 12:21
quelle

Tags und Links