2017-07-27 4 views
-2

Ich habe IOptionen aus einem .NET Core Web API Controller erfolgreich ausprobiert und verwendet.Wie kann ich auf IOtions (oder Einstellungen) von anderen Ebenen meiner .NET Core App zugreifen?

Zum Beispiel arbeitet das für mich:

public MyController(IOptions<MySettings> options) 
{ 
    // I can access these _options from any method in this Controller. 
    _options = options.Value; 
} 

Aber ich brauche, um meine ioptions aus anderen Ebenen in meiner App zuzugreifen.

Zum Beispiel vielleicht das ich habe ...

-Controller --calls -> Business Layer --calls -> Data Access Layer

ich wirklich nicht wollen, eine ioptions passieren Parameter in der Aufrufkette herunter. Ich habe MySettings in eine eigene Assembly gestellt, um allen Layern Zugriff darauf zu gewähren.

  • Bin ich damit falsch?
  • Was ist der richtige Weg, dies zu tun?
  • Gibt es eine Möglichkeit, IOports automatisch in den Konstruktor wie den Controller zu injizieren? (Wenn ja, wie instanziiert ich jede Klasse, wo ich das brauchen?)

Edit:

  • Ich bin nicht wirklich besorgt über Abhängigkeiten, per se, aber der Fluss von Informationen durch eine Millionen "verknüpfte" Tiers.

Controller (Verbindungszeichenfolge von config) --calls -> Business Layer (Connection String) --calls -> Data Access Layer (Connection String)

I Connection String als Beispiel nur verwendet .

Danke.

+0

Mögliches Duplikat von [.net Kern, n-Layer-App, sollte Dienste Layer Abhängigkeit von Microsoft.Extensions.Options.dll haben] (https://StackOverflow.com/Questions/44987633/net-Core-N-Layered -app-sollte-services-layer-dependence-on-microsoft-ext) – Tseng

Antwort

1

Sie müssen es nicht in der Kette durchlaufen. Wenn Sie Ihre IOptions in Startup.cs registrieren, ist es für alle Ihre Layer zugänglich. DI-Container ist es egal, wo Ihre IOptions verwendet werden, solange dieser Layer eine Abhängigkeit von IOptions hat und der DI-Container weiß, welcher Typ verwendet werden soll, um ihn zu instanziieren.

+0

Danke. Das hat mich in die richtige Richtung gelenkt. Ich bin neu bei @net-core und wusste nicht, wie es DI in Startup.cs gehandhabt hat. Dann klärte sich das noch mehr: https://stackoverflow.com/questions/36904174/asp-net-5-di-app-setting-outside-controller Meine Frage war zu eng und kann auf beliebige Querschnitte angewendet werden Bedenken. – TJH

Verwandte Themen