2017-10-31 1 views
0

Ich bin neu bei. NET-Core und so entschuldigt, wenn dies eine neue Frage ist. ich ein Web-api Projekt in .net Kern 2 mit VS 2017.Zugriff auf IOptions Objekt. NET-Kern

erstellt

Für mich, ich habe Datei mit einigen Verbindungseinstellungen appsettings.json:

Nach etwa ioptions von Microsoft Tutorials lesen, mache ich etwas wie folgt aus:

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddOptions(); 
     services.Configure<MyOptions>(Configuration); 

     //i want to access MyOptions object here to configure other services?how do i do that? 

     service.AddHangfire(// Get MyOptions.HangfireConenctionString etc.) 

     } 

Wie greife ich auf die erstellten myOptions in ConfigureServices Objekt und auch wenn ich es in Configure zugreifen müssen (IApplicationBuilder App, ..) Methode?

Ich habe in den Tutorials nur Beispiele für Injektions-IOptionen in Controllern gesehen. Jede Hilfe wird geschätzt. Dank

+0

Bitte lesen Sie [diese] (https://simpleinjector.readthedocs.io/en/latest/aspnetintegration.html#working-with-ioption-t). – Steven

Antwort

1

Um einige Einstellungen in

public void ConfigureServices(IServiceCollection services) 
{ 
    // Load the settings directly at startup. 
    var settings = Configuration.GetSection("Root:MySettings").Get<MySettings>(); 

    // Verify mailSettings here (if required) 

    service.AddHangfire(
     // use settings variable here 
    ); 

    // If the settings needs to be injected, do this: 
    container.AddSingleton(settings); 
} 

Im Fall, dass Sie benötigen, um Ihre Konfigurationsobjekt innerhalb einer Anwendungskomponente verwendet werden do keine IOptions<T> in Ihrer Komponente injizieren, denn das ist nur unforatunate Nachteile verursacht, wie erklärt here. Stattdessen injizieren Sie den Wert direkt, wie im folgenden Beispiel gezeigt.

public class HomeController : Controller 
{ 
    private MySettings _settings; 
    public HomeController(MySettings settings) 
    { 
     _settings = settings; 
    } 
} 
+0

Vielen Dank @Steven! – Coder

1

Sie sind in der Nähe

services.Configure<MyOptions>(options => Configuration.GetSection("MyOptions").Bind(options)); 

Sie jetzt Ihre MyOptions Dependency Injection mit Zugriff auf

public class HomeController : Controller 
{ 
    private MySettings _settings; 
    public HomeController(IOptions<MySettings> settings) 
    { 
     _settings = settings.Value 
     // _settings.StringSetting == "My Value"; 
    } 
} 

Ich nahm die Schnipsel aus diesem ausgezeichneten Artikel: https://andrewlock.net/how-to-use-the-ioptions-pattern-for-configuration-in-asp-net-core-rc2/ von Andrew Lock.

+0

Ich kann @ Steven Post wegen des Rufes nicht kommentieren, aber er ist eine richtige Spur über die Injektion. Danke für die Nachricht. –