Läbivaatamine:
Tavaliselt on instanteeritud objekt klassi instanseerimine uue märksõnaga
C# loob dünaamiliselt klassi eksemplari klassitehases järgmiste meetoditega:
Activator.CreateInstance (type) Activator.CreateInstance (Type, Object[])
Esiteks defineerime ITesti liidese järgmiselt:
Defineeri kaks rakendusklassi, nimelt: TestA ja TestB, ning kood on järgmine:
kus TestB-l on mitte-tühi konstruktor
GetUserName meetod TestB klassis peab lugema konfiguratsioonifaili IConfigurationi kaudu ja seejärel ühendama selle saabuvate parameetritega, et tagastada tagastusväärtus.
Konfiguratsioonifail on järgmine:
Loome objekte, laadides dll-i dünaamiliselt ja luues neid peegelduse teel ning instantsieerides neid vastavalt Activator ja ActivatorUtilities abil, kasutades järgmist koodi:
Tagastustulemused:
rets "Tere, itsvse.com" Näiteks. Sõnum "Tüübi 'ClassLibrary1.TestB' jaoks pole määratletud parameetrivaba konstruktorit."
rets "Tere, itsvse.com" rets "Aaaa itsvse.com" Kui kasutada Activatorit TestB objekti loomiseks, teatatakse viga:Tüübi 'ClassLibrary1.TestB' jaoks ei ole määratletud parameetrivaba konstruktorit.
TestA ja TestB loomine ActivatorUtilities'i kaudu ei teata veast ning meetodit saab täita tavapäraselt, nagu allpool näidatud:
Aktivaatori kasutamisel .NET raamistikus objektide loomiseks pole probleemi, kuid asp.net tuumas tutvustatakse IOC ja DI kontseptsioone ning paljud objektid ei ole parameetrivabad konstruktorid ja neid tuleb edastada vastavas rakendusklassis.
Kus _services staatilised muutujad on defineeritud järgmiselt:
CreateInstance(IServiceProvider, Type, Object[])
parameeter
Teenusepakkuja IServiceProvider Teenusepakkuja sõltuvuste lahendamiseks
instanceType Tüüp Tüüp, mida aktiveerida
Parameetrid Objekt[]
Konstruktori parameetrid, mida pakkuja ei paku。
Viide:Hüperlingi sisselogimine on nähtav.
(Lõpp)
|