Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memuatkan, Menggerakkan dan Menjalankan Kelas dengan Selamat daripada Perhimpunan Dimuat Secara Dinamik?

Bagaimana untuk Memuatkan, Menggerakkan dan Menjalankan Kelas dengan Selamat daripada Perhimpunan Dimuat Secara Dinamik?

DDD
Lepaskan: 2025-01-21 02:23:08
asal
361 orang telah melayarinya

How to Safely Load, Instantiate, and Run a Class from a Dynamically Loaded Assembly?

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.

Memuatkan pemasangan

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.

Segera kelas dan kaedah panggilan

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Nyahpasang pemasangan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan