Pregled:
Običajno je instanciran objekt instanca razreda z novo ključno besedo
C# dinamično ustvari instanco razreda v tovarni razredov z naslednjimi metodami:
Activator.CreateInstance (tip) Activator.CreateInstance (tip, objekt[])
Najprej definiramo ITest vmesnik takole:
Določimo dva implementacijska razreda, in sicer: TestA in TestB, koda pa je naslednja:
kjer ima TestB neprazen konstruktor
Metoda GetUserName v razredu TestB mora prebrati konfiguracijsko datoteko preko IConfiguration in jo nato povezati z vhodnimi parametri, da vrne vrnjeno vrednost.
Konfiguracijska datoteka je naslednja:
Objekte ustvarjamo tako, da dinamično nalagamo dll, jih ustvarimo z refleksijo in jih instanciramo prek Activator oziroma ActivatorUtilities, z naslednjo kodo:
Rezultati vrnitve:
upokojitev "Živjo, itsvse.com" bivši. Sporočilo "Ni definiranega konstruktorja brez parametrov za tip 'ClassLibrary1.TestB'."
upokojitev "Živjo, itsvse.com" upokojitev "Aaaa itsvse.com" Pri uporabi Activatorja za ustvarjanje TestB objekta se prijavi napaka:Ni definiranega konstruktorja brez parametrov za tip 'ClassLibrary1.TestB'.
Ustvarjanje TestA in TestB preko ActivatorUtilities ne bo poročalo o napaki, metoda pa se lahko izvaja normalno, kot je prikazano spodaj:
Ni težav z uporabo Activatorja za instanciranje objektov v .NET ogrodju, vendar so v asp.net jedru uvedeni koncepti IOC in DI, mnogi objekti pa niso konstruktorji brez parametrov in jih je treba prenesti v ustrezni implementacijski razred.
Kjer je _services statičnih spremenljivk definiranih takole:
CreateInstance(IServiceProvider, Type, Object[])
parameter
Ponudnik IServiceProvider Ponudnik storitev za reševanje odvisnosti
instanceType Vrsta Tip za aktivacijo
Parametri Cilj[]
Parametri konstruktorja, ki jih ponudnik ne zagotavlja。
Referenčni:Prijava do hiperpovezave je vidna.
(Konec)
|