Révision:
Typiquement, un objet instancié est une instanciation d’une classe avec le nouveau mot-clé
C# crée dynamiquement une instance d’une classe dans la chaîne de classes en utilisant les méthodes suivantes :
Activator.CreateInstance (type) Activator.CreateInstance (Type, Object[])
Tout d’abord, nous définissons une interface ITest comme suit :
Définissons deux classes d’implémentation, à savoir : TestA et TestB, et le code est le suivant :
où TestB possède un constructeur non vide
La méthode GetUserName dans la classe TestB doit lire le fichier de configuration via IConfiguration, puis le assembler avec les paramètres entrants pour retourner la valeur de retour.
Le fichier de configuration est le suivant :
Nous créons des objets en chargeant dynamiquement la DLL, en les créant par réflexion, puis en les instanciant respectivement via Activator et ActivatorUtilities, avec le code suivant :
Résultats du retour :
ret « Bonjour itsvse.com » ex. Message « Aucun constructeur sans paramètre défini pour le type 'ClassLibrary1.TestB'. »
ret « Bonjour itsvse.com » ret « Aaaa itsvse.com » Lors de l’utilisation d’Activator pour créer un objet TestB, une erreur est signalée :Aucun constructeur sans paramètre défini pour le type 'ClassLibrary1.TestB'.
La création de TestA et TestB via ActivatorUtilities ne signalera pas d’erreur, et la méthode peut être exécutée normalement, comme indiqué ci-dessous :
Il n’y a aucun problème à utiliser Activator pour instancier des objets dans le framework .NET, mais au cœur asp.net, les concepts d’IOC et DI sont introduits, et de nombreux objets ne sont pas des constructeurs sans paramètre et doivent être passés dans la classe d’implémentation correspondante.
Où _services variables statiques sont définies comme suit :
CreateInstance(IServiceProvider, Type, Object[])
paramètre
Fournisseur IServiceProvider Fournisseur de services pour la résolution des dépendances
instanceType Type Le type à activer
Paramètres Objet[]
Paramètres du constructeur qui ne sont pas fournis par le fournisseur。
Référence:La connexion hyperlientérée est visible.
(Fin)
|