Pārskats:
Parasti instancēts objekts ir klases instancēšana ar jauno atslēgvārdu
C# dinamiski izveido klases instanci klases rūpnīcā, izmantojot šādas metodes:
Activator.CreateInstance (tips) Activator.CreateInstance (tips, objekts[])
Pirmkārt, mēs definējam ITest saskarni šādi:
Definējiet divas ieviešanas klases, proti: TestA un TestB, un kods ir šāds:
kur TestB ir netukšs konstruktors
Metodei GetUserName klasē TestB ir jānolasa konfigurācijas fails, izmantojot IConfiguration, un pēc tam jāsavieno ar ienākošajiem parametriem, lai atgrieztu atgriezto vērtību.
Konfigurācijas fails ir šāds:
Mēs izveidojam objektus, dinamiski ielādējot dll, izveidojot tos ar atspoguļojumu un instancējot tos, izmantojot attiecīgi Activator un ActivatorUtilities, ar šādu kodu:
Atgriezt rezultātus:
ret "Sveiki itsvse.com" piem. Ziņa "Tipam "ClassLibrary1.TestB" nav definēts konstruktors bez parametriem."
ret "Sveiki itsvse.com" ret "aaaa itsvse.com" Izmantojot aktivatoru, lai izveidotu TestB objektu, tiek ziņots par kļūdu:Tipam 'ClassLibrary1.TestB nav definēts konstruktors bez parametriem.
Izveidojot TestA un TestB, izmantojot ActivatorUtilities, netiks ziņots par kļūdu, un metodi var izpildīt normāli, kā parādīts tālāk:
Nav problēmu izmantot Activator, lai instancētu objektus .NET ietvarā, bet asp.net kodolā tiek ieviesti IOC un DI jēdzieni, un daudzi objekti nav bez parametriem konstruktori, un tie ir jānodod attiecīgajā ieviešanas klasē.
Kur _services statiskos mainīgos lielumus definē šādi:
CreateInstance(IServiceProvider, tips, objekts[])
Parametru
pakalpojumu sniedzējs IServiceProvider Pakalpojuma sniedzējs atkarību risināšanai
instances tips Veids Aktivizējamais veids
Parametri Objekts[]
Konstruktora parametri, kurus nenodrošina pakalpojumu sniedzējs。
Atsauce:Hipersaites pieteikšanās ir redzama.
(Beigas)
|