Chciałbym uzyskać dostęp do Active Directory z mojej firmy w wielu kontrolerach z mojego projektu ASP.NET vNext, i wstawiłem nazwę domeny do mojego pliku config.json, więc mam dostęp to z klasy Configuration. Uważam, że ciężko jest zawsze utworzyć nowy obiekt konfiguracyjny za każdym razem, gdy chcę uzyskać dostęp do pliku config.json, czy jest jakiś sposób przez interfejs API IConfiguration
, aby uzyskać dostęp do klasy konfiguracji zainicjowanej w klasie uruchamiania?Dostęp do obiektu konfiguracyjnego z klasy startowej
Odpowiedz
Przykładem, jak można to zrobić:
Załóżmy, że masz config.json jak poniżej:
{
"SomeSetting1": "some value here",
"SomeSetting2": "some value here",
"SomeSetting3": "some value here",
"ActiveDirectory": {
"DomainName": "DOMAIN-NAME-HERE"
}
}
Utwórz typ POCO posiadające informacje Opcja:
public class ActiveDirectoryOptions
{
public string DomainName { get; set; }
}
W pliku Startup.cs podczas konfigurowania usług:
services.Configure<ActiveDirectoryOptions>(optionsSetup =>
{
//get from config.json file
optionsSetup.DomainName = configuration.Get("ActiveDirectory:DomainName");
});
We wszystkich sterowników, które chcą dostać to ustawienie config, coś jak ... Tutaj opcji jest wstrzykiwany przez system DI:
public class HomeController : Controller
{
private readonly IOptions<ActiveDirectoryOptions> _activeDirectoryOptions;
public HomeController(IOptions<ActiveDirectoryOptions> activeDirectoryOptions)
{
_activeDirectoryOptions = activeDirectoryOptions;
}
public IActionResult Index()
{
string domainName = _activeDirectoryOptions.Options.DomainName;
........
}
}
W odpowiedzi na komentarz:
Nie jest kilka opcji, które mogę myśleć:
z poziomu działania, można zrobić
var options = HttpContext.RequestServices.GetRequiredService<IOptions<ActiveDirectoryOptions>>().Options;
Można mieć parametr do działania, które jest ozdobione
FromServicesAttribute
. Ten atrybut spowoduje, że wartość parametru zostanie pobrana z DI. Przykład:public IActionResult Index([FromServices] IOptions<ActiveDirectoryOptions> options)
Wolę # 2 na # 1 jak w przypadku testów jednostkowych daje informacje na temat wszystkich elementów zależnych.
Dependency Injection było jedną z moich opcji, ale zakładam, że wstrzykniesz wiele repozytoriów wewnątrz kontrolera i obiektu UserManager, ponieważ potrzebujesz pewnej obsługi użytkownika, twój konstruktor będzie bardzo zajęty. I przez cały czas, gdy chcesz używać kontrolera, obiekt IOptions będzie instancjonowany, ale co, jeśli chcesz po prostu użyć tego obiektu w jednej metodzie kontrolera? –
@ChrisProlls: Zaktualizowałem powyższą odpowiedź z danymi dotyczącymi Twojego komentarza. –
# 2 działa bardzo ładnie :) Dzięki! Próbowałem # 1, ale potrzebuje obiektu HttpContext do korzystania z metody RequestServices, nie jest to metoda statyczna. Wcześniej moglibyśmy użyć System.Web do pobrania bieżącego HttpContext, ale z ASP.NET vNastępnie obszar nazw System.Web już nie istnieje. Jak mogę znaleźć bieżący HttpContext? –
- 1. Czy uzyskasz dostęp do obiektu klasy przez wskaźnik do jego reguł pochodnych klasy dzielenia klasy?
- 2. Dostęp do obiektu aplikacji wewnątrz klasy okna w WPF?
- 3. dostęp metodę obiektu z gałązką
- 4. Dostęp do wirtualnej metody klasy Parent z dziedziczenia obiektu klasy Child
- 5. Jak uzyskać dostęp do głównego obiektu klasy z funkcji wewnątrz klasy w Javie?
- 6. Dostęp do Config.groovy z klasy Java
- 7. Dostęp do zmiennej statycznej z innej klasy
- 8. C#: Dostęp do Enum z innej klasy
- 9. Dostęp do zmiennych HttpApplication.Application z klasy
- 10. Dostęp do klasy zewnętrznej "super" z klasy wewnętrznej w Javie
- 11. Dziedziczenie: dostęp do pól klasy podstawowej z podklasy
- 12. C# - Jak uzyskać dostęp do wewnętrznego klasy z zespołu zewnętrznego
- 13. Dostęp HashMap z innej klasy
- 14. właściwości obiektu dostęp obrębie obiektu
- 15. Przekazywanie obiektu klasy do jądra
- 16. Dostęp do obiektu utworzonego przez XAML z C#
- 17. Jak ograniczyć dostęp do zagnieżdżonego elementu klasy do otaczającej klasy?
- 18. Uzyskaj nazwę klasy z obiektu klasy
- 19. Pobierz obiekt klasy zewnętrznej z obiektu klasy wewnętrznej.
- 20. Dostęp metodę obiektu wewnątrz łańcucha
- 21. Dostęp do obiektu DOM po wywołaniu AJAX?
- 22. NodeJS supertest dostęp do obiektu sesji
- 23. Dostęp do obiektu w ciągu Array
- 24. Jak uzyskać dostęp do typu obiektu węglowego?
- 25. C# dostęp do właściwości obiektu ogólnego
- 26. TypeScript: dostęp do statycznej metody klasy
- 27. Dostęp do klasy nadrzędnej w szkielecie
- 28. Klasa wewnętrzna uzyskująca dostęp do klasy zewnętrznej
- 29. Jak uzyskać dostęp do elementu zewnętrznego z literału obiektu zagnieżdżonego?
- 30. Jak uzyskać dostęp do właściwości indeksowanej obiektu COM z Powershell
Zmieniłem twój tytuł. Zobacz, "[Czy w tytułach pytania powinny znaleźć się" znaczniki "?] (Http://meta.stackexchange.com/questions/19190/)", gdzie konsensus brzmi "nie, nie powinien". –