Szemle:
Általában egy példányosított objektum egy osztály megtestesítése az új kulcsszavaval
C# dinamikusan létrehoz egy osztály példányát az osztálygyárban az alábbi módszerekkel:
Activator.CreateInstance (type) Activator.CreateInstance (Type, Object[])
Először az ITest interfészt a következőképpen definiáljuk:
Definiáljunk két implementációs osztályt, nevezetesen: TestA és TestB, és a kód a következő:
ahol a tesztB nem üres konstruktorral rendelkezik
A TestB osztályban a GetUserName metódusnak el kell olvasnia a konfigurációs fájlt az IConfigurationon keresztül, majd össze kell illesztenie a bejövő paraméterekkel, hogy visszaadja a visszaadó értéket.
A konfigurációs fájl a következő:
Objektumokat úgy hozunk létre, hogy dinamikusan töltjük be a dll-t, visszatükrözéssel, és instantizáljuk őket az Activator és ActivatorUtilities segítségével, a következő kóddal:
Visszaküldési eredmények:
ret. "Szia itsvse.com" ex. Üzenet "Nincs paraméter nélküli konstruktor definiálva a 'ClassLibrary1.TestB' típusra."
ret. "Szia itsvse.com" ret. "Aaaa itsvse.com" Amikor az Activator segítségével TestB objektumot hozunk létre, hibát jelentenek:Nincs paraméter nélküli konstruktor definiálva a 'ClassLibrary1.TestB' típushoz.
Ha TestA és TestB létrehozása az ActivatorUtilities-en keresztül nem jelent hibát, és a módszer normálisan is végrehajtható, ahogy az alábbiakban látható:
Nem probléma az Activator használatával objektumokat instanciálni a .NET keretrendszerben, de asp.net magban bevezetik az IOC és DI fogalmait, és sok objektum nem paraméter nélküli konstruktor, hanem a megfelelő implementációs osztályban kell átadni.
Ahol _services statikus változó a következőképpen definiálható:
CreateInstance(IServiceProvider, Type, Object[])
paraméter
Szolgáltató IServiceProvider Szolgáltatásszolgáltató függőségek megoldására
instanceType Típus Az aktiválandó típus
paraméterek Tárgy[]
Konstruktor paraméterek, amelyeket a szolgáltató nem biztosít。
Utalás:A hiperlink bejelentkezés látható.
(Vége)
|