Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 36608|Antwort: 1

[.NET Core] ASP.NET Core (iii) Erstellen Sie Instanzen dynamisch mit ActivatorUtilities

[Link kopieren]
Veröffentlicht am 01.12.2020 13:50:31 | | | |
Rezension:

ASP.NET Core (1) verwendet Redis-Caching
https://www.itsvse.com/thread-9393-1-1.html

ASP.NET Core (2) Die Anwendung per Code neu starten
https://www.itsvse.com/thread-9480-1-1.html

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)




Vorhergehend:Mobile und Desktop OAuth 2.0 Sicherheitsanalyse und CodeVerifier-Mechanismus
Nächster:Verwenden Sie JSC, um eine DLL in JavaScript für C#-Aufrufe zu generieren
Veröffentlicht am 22.09.2021 20:31:33 |
Lerne zu lernen...
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com