Rezension:
Typischerweise ist ein instanziertes Objekt eine Instanziierung einer Klasse mit dem neuen Schlüsselwort
C# erzeugt dynamisch eine Instanz einer Klasse in der Klassenfabrik mit folgenden Methoden:
Activator.CreateInstance (Type) Activator.CreateInstance (Type, Object[])
Zuerst definieren wir eine ITest-Schnittstelle wie folgt:
Definieren Sie zwei Implementierungsklassen, nämlich: TestA und TestB, und der Code ist wie folgt:
wobei TestB einen nichtleeren Konstruktor besitzt
Die GetUserName-Methode in der TestB-Klasse muss die Konfigurationsdatei über IConfiguration lesen und sie dann mit den eingehenden Parametern zusammenfügen, um den Rückgabewert zurückzugeben.
Die Konfigurationsdatei ist wie folgt:
Wir erstellen Objekte, indem wir die DLL dynamisch laden, sie durch Reflexion erstellen und sie jeweils über Activator und ActivatorUtilities instanziieren, mit folgendem Code:
Rückgabeergebnisse:
Ret "Hallo itsvse.com" z.B. Nachricht "Kein parameterloser Konstruktor für den Typ 'ClassLibrary1.TestB' definiert."
Ret "Hallo itsvse.com" Ret "Aaaa itsvse.com" Beim Erstellen eines TestB-Objekts mit Activator wird ein Fehler gemeldet:Kein parameterloser Konstruktor, der für den Typ 'ClassLibrary1.TestB' definiert ist.
Das Erstellen von TestA und TestB über ActivatorUtilities meldet keinen Fehler, und die Methode kann wie unten gezeigt normal ausgeführt werden:
Es ist kein Problem, Activator zu verwenden, um Objekte im .NET-Framework zu instanziieren, aber im asp.net Kern werden die Konzepte IOC und DI eingeführt, und viele Objekte sind keine parameterlosen Konstruktoren und müssen in der entsprechenden Implementierungsklasse übergeben werden.
Wobei _services statischen Variablen wie folgt definiert sind:
CreateInstance(IServiceProvider, Type, Object[])
Parameter
Anbieter IServiceProvider Dienstanbieter zur Auflösung von Abhängigkeiten
instanceType Typ Der Typ zum Aktivieren
Parameter Objekt[]
Konstruktorparameter, die vom Anbieter nicht bereitgestellt werden。
Referenz:Der Hyperlink-Login ist sichtbar.
(Ende)
|