Men bir yoki bir nechta DLL-ni dinamik ravishda yuklamoqchiman, shunda ular mening asosiy ilovamga qaraganda boshqa xavfsizlik yoki tayanch yo'l bilan ishlaydi. Ushbu DLL-larni alohida AppDomain-ga qanday yuklashim va ulardan ob'ektlarni yaratishim mumkin?
DLL-larni alohida AppDomain-ga yuklash
Javoblar (5)
Aniqrog'i
AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy
string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);
Agar bularning barchasi to'g'ri bajarilgan bo'lsa (hech qanday istisnolarsiz) endi sizda yangi domeningizga TypeIWantToLoad nusxasi yuklangan. Sizda mavjud bo'lgan misol aslida proksi-serverdir (chunki haqiqiy ob'ekt yangi domenda), lekin siz uni oddiy ob'ektingiz kabi ishlatishingiz mumkin.
Eslatma: Men bilishimcha, TypeIWantToLoad MarshalByRefObject-dan meros bo'lishi kerak.
Agar siz 3.5 ni maqsad qilgan bo‘lsangiz, barchani boshqarish uchun yangi boshqariladigan kengaytiriladigan tizim dan foydalanishingiz mumkin. siz uchun og'ir yuk.
Buning uchun AppDomain.CreateInstance usulidan foydalanishingiz mumkin. Haqiqiy ob'ektni olish uchun qaytariladigan ObjectHandle-ning Unwrap usulini chaqirishingiz kerak bo'ladi.
AppDomain.Create( ... ) yordamida yangi Appdomain yarating. AppDomain-ni yaratgandan so'ng, DLL-larni ushbu AppDomain-ga yuklang.
Appdomain-ning Create* bilan barcha usullarini ko'rib chiqing. CreateInstanceAndUnwrap va boshqalar kabi ba'zi narsalar mavjud.
Yuqorida aytib o'tilganidek, yangi ilova domenini yaratish uchun AppDomain.CreateDomain-dan foydalaning. Shundan so'ng siz Load usuli yordamida yig'ilishni yuklashingiz yoki hatto ExecuteAssembly usuli yordamida montajni bajarishingiz mumkin. Assambleya allaqachon yuklanganligini ko'rish uchun GetAssemblies dan foydalanishingiz mumkin. Shuni ham yodda tutingki, siz montajni yuklaganingizdan so'ng uni tushira olmaysiz. Domenni yuklab olishingiz kerak bo'ladi.