首页 > 后端开发 > C++ > 如何从动态加载的程序集中安全地加载、实例化和运行类?

如何从动态加载的程序集中安全地加载、实例化和运行类?

DDD
发布: 2025-01-21 02:23:08
原创
359 人浏览过

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

最佳实践:动态加载程序集、实例化类并运行方法

动态编程中,经常需要加载程序集、实例化类并调用其方法。本文介绍一种高效且安全的实现方法。

加载程序集

动态加载程序集可以使用 Assembly.LoadFile 方法,该方法接收程序集文件的路径作为参数。加载程序集后,您可以获取其类型、方法和其他详细信息。

实例化类和调用方法

实例化类和调用其方法有多种方法。但是,对于动态加载的程序集,使用反射更有优势。反射允许您在运行时访问和调用类型的成员。

传统方法:

以下代码演示了将实例化对象强制转换为所需接口的传统方法:

<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>
登录后复制

推荐方法:使用 AppDomain:

更安全、更灵活的方法是首先将程序集加载到其自身的 AppDomain 中。这可以实现更好的隔离和控制。将之前的代码替换为以下代码:

<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>
登录后复制

卸载程序集

如果不再需要程序集,可以使用 AppDomain.Unload 方法卸载它。这有助于资源管理并避免内存泄漏。

总之,使用 AppDomain 加载和卸载程序集是推荐的方法,因为它能提供更好的灵活性和安全性,并增强隔离性。

以上是如何从动态加载的程序集中安全地加载、实例化和运行类?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板