Resensi:
Biasanya objek yang diinstansiasi adalah instansiasi kelas dengan kata kunci baru
C# secara dinamis membuat instans kelas di class factory menggunakan metode berikut:
Activator.CreateInstance (Jenis) Activator.CreateInstance (Jenis, Objek[])
Pertama, kami mendefinisikan antarmuka ITest sebagai berikut:
Tentukan dua kelas implementasi, yaitu: TestA dan TestB, dan kodenya adalah sebagai berikut:
di mana TestB memiliki konstruktor non-kosong
Metode GetUserName di kelas TestB perlu membaca file konfigurasi melalui IConfiguration, lalu menyatukannya dengan parameter masuk untuk mengembalikan nilai yang dikembalikan.
File konfigurasi adalah sebagai berikut:
Kami membuat objek dengan memuat dll secara dinamis, membuatnya dengan refleksi, dan membuat instance masing-masing melalui Activator dan ActivatorUtilities, dengan kode berikut:
Mengembalikan hasil:
ret "Halo itsvse.com" mis. Pesan "Tidak ada konstruktor tanpa parameter yang ditentukan untuk jenis 'ClassLibrary1.TestB'."
ret "Halo itsvse.com" ret "aaaa itsvse.com" Saat menggunakan Activator untuk membuat objek TestB, kesalahan dilaporkan:Tidak ada konstruktor tanpa parameter yang ditentukan untuk jenis 'ClassLibrary1.TestB'.
Membuat TestA dan TestB melalui ActivatorUtilities tidak akan melaporkan kesalahan, dan metode ini dapat dijalankan secara normal, seperti yang ditunjukkan di bawah ini:
Tidak ada masalah dalam menggunakan Activator untuk membuat instance objek dalam kerangka kerja .NET, tetapi dalam inti asp.net, konsep IOC dan DI diperkenalkan, dan banyak objek bukan konstruktor tanpa parameter dan perlu diteruskan di kelas implementasi yang sesuai.
Di mana variabel statis _services didefinisikan sebagai berikut:
CreateInstance(IServiceProvider, Jenis, Objek[])
Parameter
Penyedia Penyedia Layanan Layanan Penyedia layanan untuk menyelesaikan dependensi
instanceType Tipe Jenis yang akan diaktifkan
Parameter Objek[]
Parameter konstruktor yang tidak disediakan oleh penyedia。
Referensi:Login hyperlink terlihat.
(Akhir)
|