Peržiūra:
Paprastai instanciuotas objektas yra klasės egzempliorius su nauju raktažodžiu
C# dinamiškai sukuria klasės egzempliorių klasės gamykloje, naudodamas šiuos metodus:
Activator.CreateInstance (tipas) Activator.CreateInstance (tipas, objektas[])
Pirma, mes apibrėžiame ITest sąsają taip:
Apibrėžkite dvi diegimo klases, būtent: TestA ir TestB, ir kodas yra toks:
kur TestB turi netuščią konstruktorių
TestB klasės metodas GetUserName turi nuskaityti konfigūracijos failą per IConfiguration, o tada sujungti jį su gaunamais parametrais, kad būtų grąžinta reikšmė.
Konfigūracijos failas yra toks:
Mes kuriame objektus dinamiškai įkeldami dll, kurdami juos atspindžiu ir instanciuodami juos atitinkamai naudodami "Activator" ir "ActivatorUtilities" su šiuo kodu:
Grąžinti rezultatus:
ret "Sveiki, itsvse.com" pvz. Žinutė "ClassLibrary1.TestB tipui nenustatytas konstruktorius be parametrų."
ret "Sveiki, itsvse.com" ret "aaaa itsvse.com" Naudojant aktyvatorių TestB objektui sukurti, pranešama apie klaidą:Tipui "ClassLibrary1.TestB" nenustatytas konstruktorius be parametrų.
Sukūrus "TestA" ir "TestB" naudojant "ActivatorUtilities", klaida nebus pranešta, o metodą galima vykdyti įprastai, kaip parodyta toliau:
Naudojant aktyvatorių objektams sukurti .NET sistemoje nėra jokių problemų, tačiau asp.net branduolyje pristatomos IOC ir DI sąvokos, o daugelis objektų nėra konstruktoriai be parametrų ir juos reikia perduoti atitinkamoje įgyvendinimo klasėje.
Kur _services statiniai kintamieji apibrėžiami taip:
CreateInstance(IServiceProvider, tipas, objektas[])
Parametras
teikėjas IServiceTeikėjas Priklausomybių sprendimo paslaugų teikėjas
egzemplioriaus tipas Tipas Aktyvuotinas tipas
Parametrai Objektas[]
Konstruktoriaus parametrai, kurių nepateikia teikėjas。
Nuoroda:Hipersaito prisijungimas matomas.
(Pabaiga)
|