何时在应用程序中创建新的应用程序域有哪些指导方针和最佳实践?
此外,在一个应用程序中如何使用多个应用程序域的一些常见用途和示例是什么?
我见过的最常见的场景是能够提供与主程序不同的安全模型的可扩展性。
在单独的 AppDomain 中加载插件允许两件事:
AppDomains 的另一个很好的用途是加载和检查程序集。在单独的 AppDomain 中执行此操作允许您从单独的程序集中收集信息(或运行代码),然后从进程空间中卸载整个程序集。如果直接加载程序集,则无法卸载它。如果您希望能够在运行时将类型“升级”到新版本(即:加载远程程序集并稍后重新加载),这也很有用。
当您需要在应用程序中托管不可靠的第三方组件或您不信任它们(如插件)或希望能够卸载它们时,建议创建新域。
一个典型的例子是类似插件/插件的情况。它不仅允许您在需要时卸载 DLL,还可以让您更好地控制插件允许执行的操作。
此外,如果您创建要再次卸载的临时程序集(代码生成),这是一个很好的方法。(LCG 只允许实现单个方法,如果你想实现一个完整的类,你需要发射到一个“真正的”程序集)。