Wie bekomme ich IOptions in der ConfigureServices-Methode?

9

Ich habe asp.net Core-Anwendung. Ich möchte IOptions pattern verwenden, um Werte aus appsettings.json zu injizieren. Also habe ich eine Klasse SecurityHeaderOptions und auch die Zielklasse SecurityHeadersBuilder , deren Konstruktor IOptions<SecurityHeaderOptions> als Parameter akzeptiert.

Ich weiß, dass .net core implizit eine Instanz von SecurityHeadersBuilder erstellen kann, indem IOptions<SecurityHeaderOptions> nach der Registrierung mit container injiziert wird.

Allerdings möchte ich explizit eine Instanz von SecurityHeadersBuilder erstellen, eine seiner Methoden aufrufen und dann die Instanz mit dem Container registrieren.

%Vor%

ConfigureServices-Methode

%Vor%

Fragen
1 & gt; Wenn ich Optionen explizit in den Konstruktor übergebe, muss ich SecurityHeaderOptions mit dem Container registrieren, indem ich service.Configure method?

2 & gt; Configuration.GetSection("SecurityHeaderOptions") kann die Instanz von IOptions<SecurityHeaderOptions> nicht zurückgeben, stattdessen gibt sie IConfigurationSection ?

zurück

3 & gt; Wie kann ich auf jeden Fall SecurityHeaderOptions in den Konstruktor von SecurityHeadersBuilder laden und übergeben?

    
LP13 21.03.2017, 16:18
quelle

2 Antworten

1

So registriere ich Optionen und injiziere in SecurityHeadersBuilder

%Vor%     
LP13 21.03.2017 17:02
quelle
0

In Bezug auf Ihre Fragen:

1. Ja, Sie müssen die Optionen registrieren, aber ich glaube, dass Sie es falsch machen (zumindest an Ihrem Beispiel). Sie sollten sich wie folgt registrieren:

%Vor%

2. Ich glaube, dass die korrekte Registrierung, die ich oben erwähnt habe, das zurückgibt, was Sie erwarten.

3. Sie müssen nur registriert und auf den Konstruktor SecurityHeaderBuilder gesetzt werden. Sie benötigen (und auch nicht der Standardcontainer für .NET Core IOC) keine Konstruktorparameter, wenn Sie sie registrieren. Dafür müssten Sie andere IOCs wie Autofac verwenden.

Sie müssen jedoch SecurityHeadersBuilder registrieren, um es in anderen Klassen zu verwenden. Verwenden Sie einfach eine Schnittstelle dafür.

%Vor%

Dann registriere es einfach in startup.cs als dies

%Vor%     
João Pereira 21.03.2017 16:37
quelle