Recenzie:
De obicei, un obiect instanțiat este o instanțiere a unei clase cu noul cuvânt-cheie
C# creează dinamic o instanță a unei clase în fabrica de clase folosind următoarele metode:
Activator.CreateInstance (Tip) Activator.CreateInstance (Tip, Obiect[])
În primul rând, definim o interfață ITest astfel:
Definiți două clase de implementare, și anume: TestA și TestB, iar codul este următorul:
unde TestB are un constructor nevid
Metoda GetUserName din clasa TestB trebuie să citească fișierul de configurare prin IConfiguration și apoi să-l îmbine cu parametrii de intrare pentru a returna valoarea returnată.
Fișierul de configurare este următorul:
Creăm obiecte prin încărcarea dinamică a dll-ului, crearea lor prin reflexie și instanțierea lor prin Activator și ActivatorUtilities, respectiv, cu următorul cod:
Rezultatele revenirii:
ret "Salut itsvse.com" ex. Mesaj "Niciun constructor fără parametri definit pentru tipul 'ClassLibrary1.TestB'."
ret "Salut itsvse.com" ret "Aaaa itsvse.com" Când se folosește Activator pentru a crea un obiect TestB, se raportează o eroare:Niciun constructor fără parametri definit pentru tipul 'ClassLibrary1.TestB'.
Crearea TestA și TestB prin ActivatorUtilities nu va raporta o eroare, iar metoda poate fi executată normal, așa cum se arată mai jos:
Nu există nicio problemă în a folosi Activator pentru a instanția obiecte în framework-ul .NET, dar în nucleul asp.net sunt introduse conceptele de IOC și DI, iar multe obiecte nu sunt constructori fără parametri și trebuie trecute în clasa corespunzătoare de implementare.
Unde _services variabile statice sunt definite astfel:
CreateInstance(IServiceProvider, Type, Object[])
parametru
Furnizor IServiceProvider Furnizor de servicii pentru rezolvarea dependențelor
instanceType Tip Tipul de activat
Parametri Obiect[]
Parametri de constructor care nu sunt furnizați de furnizor。
Referință:Autentificarea cu hyperlink este vizibilă.
(Sfârșit)
|