经常会出现开发人员必须动态加载程序集、创建类实例并执行特定方法的情况。 一个主要的例子是控制台应用程序需要加载 DLL、实例化 TestRunner
类并调用其 Run()
方法。
传统方法
典型的方法是使用 Assembly.LoadFile()
加载程序集和反射来访问和调用 Run()
类的 TestRunner
方法。 然而,这需要将实例化对象转换为特定类型(例如,IRunnable
)。在处理动态生成的程序集时,这可能会出现问题。
改进的解决方案:利用 AppDomains
AppDomains 是一个更优秀、适应性更强的解决方案。此技术为动态加载的程序集创建单独的 AppDomain,从而提高隔离性和安全性。修改后的代码说明了这一点:
<code class="language-csharp">var domain = AppDomain.CreateDomain("NewDomainName"); var t = typeof(TestRunner); var runnable = domain.CreateInstanceFromAndUnwrap("C:\myDll.dll", t.Name) as IRunnable; if (runnable == null) throw new Exception("broke"); runnable.Run();</code>
使用 AppDomain 的优点
此方法具有几个主要优点:
总结
使用 AppDomains 提供了一种更安全、更灵活的方法来动态加载程序集、创建类实例和执行方法。 这种增强的控制在处理动态代码执行时特别有价值。
以上是AppDomains 如何改进动态程序集加载和调用?的详细内容。更多信息请关注PHP中文网其他相关文章!