从 System.Type 在 AppDomain 中创建实例

Posted

技术标签:

【中文标题】从 System.Type 在 AppDomain 中创建实例【英文标题】:Creating an Instance in an AppDomain from a System.Type 【发布时间】:2014-07-07 14:04:03 【问题描述】:

我正在尝试在 AppDomain 中创建一个实例。因此,我可以为每个插件创建一个单独的 AppDomain,并在使用 Unload 方法关闭它们时正确处理它们。

到目前为止,我的所有插件都有一个 IEnumerator,我在它们之间循环执行以下代码。

Type temp = (Type)enumerator.Current;
AppDomain ad = AppDomain.CreateDomain(temp.FullName);
object obj = ad.CreateInstance(temp.Assembly.FullName, temp.FullName);

但它在第三行崩溃说它无法加载文件或程序集。

我以前用过:

object obj = Activator.CreateInstance((Type)enumerator.Current);

但发现我无法通过调用 base.dispose() 正确处理插件,这意味着服务调用处于打开状态,并且在服务返回时代码将继续执行。

是否可以根据类型创建应用域?

【问题讨论】:

你为什么要自己做而不是使用maf? 这是我构建插件的遗留代码,但在构建插件时我发现插件没有正确处理。老实说,除了它代表什么,我对 maf 了解不多 【参考方案1】:

好的,所以我发现了我的错误。它应该是:

object obj = ad.CreateInstanceFrom(temp.Assembly.Location, temp.FullName);

【讨论】:

以上是关于从 System.Type 在 AppDomain 中创建实例的主要内容,如果未能解决你的问题,请参考以下文章

从 AppDomain 解决 InvalidOperationException

远程处理:从服务器 AppDomain 查找客户端 AppDomain / Assembly

从不同的 AppDomain 调用 SignalR 方法

如何从其他 appdomain 获取 UI 线程调度程序?

是否可以从另一个单独的 .NET AppDomain 更改 .NET AppDomain 中的字符串属性的值

从 App.Config 将程序集加载到 AppDomain