Anmeldelse:
Typisk er et instansieret objekt en instansiering af en klasse med det nye nøgleord
C# opretter dynamisk en instans af en klasse i klassefabrikken ved hjælp af følgende metoder:
Activator.CreateInstance (Type) Activator.CreateInstance (Type, Object[])
Først definerer vi en ITest-grænseflade som følger:
Definer to implementeringsklasser, nemlig: TestA og TestB, og koden er som følger:
hvor TestB har en ikke-tom konstruktør
GetUserName-metoden i TestB-klassen skal læse konfigurationsfilen gennem IConfiguration og derefter sammensætte den med de indkommende parametre for at returnere returværdien.
Konfigurationsfilen er som følger:
Vi opretter objekter ved dynamisk at indlæse dll'en, skabe dem ved refleksion og instansiere dem via henholdsvis Activator og ActivatorUtilities med følgende kode:
Resultater tilbage:
ret "Hej itsvse.com" f.eks. Besked "Ingen parameterløs konstruktør defineret for typen 'ClassLibrary1.TestB'."
ret "Hej itsvse.com" ret "Aaaa itsvse.com" Når Activator bruges til at oprette et TestB-objekt, rapporteres der en fejl:Ingen parameterløs konstruktør defineret for typen 'ClassLibrary1.TestB'.
Oprettelse af TestA og TestB via ActivatorUtilities vil ikke rapportere en fejl, og metoden kan udføres normalt, som vist nedenfor:
Der er ikke noget problem i at bruge Activator til at instansiere objekter i .NET-frameworket, men i asp.net kerne introduceres begreberne IOC og DI, og mange objekter er ikke parameterløse konstruktører og skal sendes i den tilsvarende implementeringsklasse.
Hvor _services statiske variable defineres som følger:
CreateInstance(IServiceProvider, Type, Object[])
parameter
Udbyder IServiceProvider Tjenesteudbyder til løsning af afhængigheder
instanceType Type Typen, der skal aktiveres
Parametre Mål[]
Konstruktørparametre, som ikke leveres af udbyderen。
Henvisning:Hyperlink-login er synlig.
(Slut)
|