Recenzja:
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)
|