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.
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
?
3 & gt; Wie kann ich auf jeden Fall SecurityHeaderOptions
in den Konstruktor von SecurityHeadersBuilder
laden und übergeben?
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.
Dann registriere es einfach in startup.cs
als dies
Tags und Links asp.net-core .net-core asp.net-core-mvc coreclr