Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 36608|Odpowiedź: 1

[.NET Core] ASP.NET Rdzeń (iii) Dynamicznie twórz instancje za pomocą ActivatorUtilities

[Skopiuj link]
Opublikowano 01.12.2020 13:50:31 | | | |
Recenzja:

ASP.NET Core (1) korzysta z buforowania Redis
https://www.itsvse.com/thread-9393-1-1.html

ASP.NET Rdzeń (2) Restart aplikacji za pomocą kodu
https://www.itsvse.com/thread-9480-1-1.html

Zazwyczaj obiekt instancjonowany to instancja klasy z nowym słowem kluczowym

C# dynamicznie tworzy instancję klasy w fabryce klas, stosując następujące metody:


Activator.CreateInstance (typ)
Activator.CreateInstance (typ, obiekt[])


Najpierw definiujemy interfejs ITest następująco:

Zdefiniuj dwie klasy implementacyjne, mianowicie: TestA i TestB, a kod wygląda następująco:

gdzie TestB ma konstruktor niepusty

Metoda GetUserName w klasie TestB musi odczytać plik konfiguracyjny przez IConfiguration, a następnie połączyć go z nadchodzącymi parametrami, aby zwrócić wartość zwrotną.

Plik konfiguracyjny wygląda następująco:



Obiekty tworzymy poprzez dynamiczne ładowanie dll, tworzenie ich przez refleksję oraz instancję za pomocą odpowiednio Activator i ActivatorUtilities, z następującym kodem:

Wyniki zwrotów:

Wycofanie
"Cześć itsvse.com"
były. Komunikat
"Brak konstruktora bezparametrowego zdefiniowanego dla typu 'ClassLibrary1.TestB'."

Wycofanie
"Cześć itsvse.com"
Wycofanie
"Aaaa itsvse.com"

Podczas użycia Activatora do tworzenia obiektu TestB zgłaszany jest błąd:Brak konstruktora bezparametrowego zdefiniowanego dla typu 'ClassLibrary1.TestB'.

Utworzenie TestA i TestB za pomocą ActivatorUtilities nie zgłasza błędu, a metoda może być wykonywana normalnie, jak pokazano poniżej:




Nie ma problemu z używaniem Activatora do instancji obiektów w frameworku .NET, ale w asp.net core wprowadzono koncepcje IOC i DI, a wiele obiektów nie jest konstruktorami bezparametrowymi i musi być przekazywanych do odpowiedniej klasy implementacyjnej.

Gdzie _services zmienne statyczne są zdefiniowane następująco:

CreateInstance(IServiceProvider, Type, Object[])
parametr

Dostawca
IServiceProvider
Dostawca usług do rozwiązywania zależności

instanceType
Typ
Typ aktywacji

Parametry
Cel[]
Parametry konstruktora, które nie są udostępniane przez dostawcę


Odniesienie:Logowanie do linku jest widoczne.

(Koniec)




Poprzedni:Analiza bezpieczeństwa OAuth 2.0 na urządzenia mobilne i desktopowe oraz mechanizm CodeVerifier
Następny:Użyj JSC do wygenerowania dll w JavaScript dla wywołań C#
Opublikowano 22.09.2021 20:31:33 |
Naucz się uczyć...
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com