Arvostelu:
Tyypillisesti instantioitu olio on luokan instanssiointi, jossa on uusi avainsana
C# luo dynaamisesti luokan instanssin luokkatehtaassa seuraavilla menetelmillä:
Activator.CreateInstance (tyyppi) Activator.CreateInstance (tyyppi, objekti[])
Ensiksi määrittelemme ITest-rajapinnan seuraavasti:
Määritellään kaksi toteutusluokkaa, nimittäin: TestA ja TestB, ja koodi on seuraava:
missä Testi B:llä on ei-tyhjä konstruktori
GetUserName-metodin TestB-luokassa täytyy lukea konfiguraatiotiedosto IConfigurationin kautta ja yhdistää se saapuvien parametrien kanssa palautusarvon palauttamiseksi.
Konfiguraatiotiedosto on seuraava:
Luomme objekteja lataamalla dll:n dynaamisesti, luomalla ne heijastuksen avulla ja instanssioimalla ne Activatorin ja ActivatorUtilitiesin avulla seuraavalla koodilla:
Palautustulokset:
ret. "Hei itsvse.com" esim. Viesti "Ei parametritonta konstruktoria määritelty tyypille 'ClassLibrary1.TestB'."
ret. "Hei itsvse.com" ret. "aaaa itsvse.com" Kun käytetään Activatoria TestB-objektin luomiseen, raportoidaan virhe:Tyypille 'ClassLibrary1.TestB' ei ole määritelty parametritonta konstruktoria.
TestA:n ja TestB:n luominen ActivatorUtilitiesin kautta ei raportoi virhettä, ja metodi voidaan suorittaa normaalisti, kuten alla on esitetty:
Aktivaattorin käytössä objektien instanssiointiin .NET-kehyksessä ei ole ongelmaa, mutta ytimessä asp.net otetaan käyttöön IOC ja DI -käsitteet, ja monet objektit eivät ole parametrittomia konstruktoreita, vaan ne täytyy siirtää vastaavassa toteutusluokassa.
Missä _services staattista muuttujaa määritellään seuraavasti:
CreateInstance(IServiceProvider, Type, Object[])
parametri
Palveluntarjoaja IServiceProvider Palveluntarjoaja riippuvuuksien ratkaisemiseen
instanceType Tyyppi Tyyppi, joka aktivoituu
parametrit Kohde[]
Rakentajan parametrit, joita palveluntarjoaja ei toimita。
Viittaus:Hyperlinkin kirjautuminen on näkyvissä.
(Loppu)
|