Amalan Terbaik: Muatkan himpunan secara dinamik, nyatakan kelas dan jalankan kaedah
Dalam pengaturcaraan dinamik, selalunya perlu memuatkan perhimpunan, membuat kelas dan memanggil kaedahnya. Artikel ini memperkenalkan kaedah pelaksanaan yang cekap dan selamat.
Pemuatan himpunan dinamik boleh dilakukan menggunakan kaedah Assembly.LoadFile
, yang menerima laluan ke fail pemasangan sebagai parameter. Selepas pemasangan dimuatkan, anda boleh mendapatkan jenis, kaedah dan butiran lain.
Terdapat banyak cara untuk membuat instantiate kelas dan memanggil kaedahnya. Walau bagaimanapun, untuk pemasangan yang dimuatkan secara dinamik, terdapat kelebihan menggunakan pantulan. Refleksi membolehkan anda mengakses dan memanggil ahli jenis pada masa jalan.
Kaedah tradisional:
Kod berikut menunjukkan kaedah tradisional untuk menghantar objek instantiated ke antara muka yang diperlukan:
<code class="language-csharp">Assembly assembly = Assembly.LoadFile(@"C:\dyn.dll"); IRunnable r = assembly.CreateInstance("TestRunner") as IRunnable; if (r == null) throw new Exception("broke"); r.Run();</code>
Kaedah yang disyorkan: Gunakan AppDomain:
Pendekatan yang lebih selamat dan lebih fleksibel ialah memuatkan pemasangan ke dalam AppDomainnya sendiri terlebih dahulu. Ini membolehkan pengasingan dan kawalan yang lebih baik. Gantikan kod sebelumnya dengan kod berikut:
<code class="language-csharp">var domain = AppDomain.CreateDomain("NewDomainName"); var type = typeof(IRunnable); var runnable = domain.CreateInstanceFromAndUnwrap(@"C:\dyn.dll", type.Name) as IRunnable; if (runnable == null) throw new Exception("broke"); runnable.Run();</code>
Jika pemasangan tidak lagi diperlukan, ia boleh dinyahpasang menggunakan kaedah AppDomain.Unload
. Ini membantu dengan pengurusan sumber dan mengelakkan kebocoran memori.
Ringkasnya, menggunakan AppDomain untuk memuat dan memunggah pemasangan ialah pendekatan yang disyorkan kerana ia memberikan fleksibiliti, keselamatan dan pengasingan yang lebih baik.
Atas ialah kandungan terperinci Bagaimana untuk Memuatkan, Menggerakkan dan Menjalankan Kelas dengan Selamat daripada Perhimpunan Dimuat Secara Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!