通过字符串在不同的程序集中创建 class 的实例

Create an instance of a class in a different assembly by strings

我需要创建一个 class 的实例,同时只有完整的 class 名称(带有命名空间)和 class 所在的程序集的文件名定义。我知道程序集在当前工作目录中。应使用默认构造函数(不带参数),因为它是唯一可用的。

经过一些 google、堆栈溢出和 MSDN 我仍然不确定最佳解决方案是什么。将加载多个程序集,因此使用应用程序域会很好 (?)。

application domain documentation says, I should use CreateInstanceAndUnwrap,但我需要完整的程序集名称。据我所知,我只能通过加载程序集来获取它。这似乎有点效率低下。

在当前卸载的程序集中创建 class 实例的好方法是什么?

谢谢!

我相信你想要Assembly.LoadFrom。这通过文件名为您提供程序集,然后可用于通过反射实例化 class。

最后,您需要加载程序集,因为它包含定义和实例化 class 所需的代码。但是,使用 AppDomain 是正确的做法,因为这会让您稍后卸载程序集。

如果程序集已经在 bin 文件夹或 GAC 中,则无需手动加载程序集。

您可以简单地使用 Activator.CreateInstance 实例化对象。

您传递给 CreateInstance 的字符串必须是程序集限定类型名称,意思是,type-name 后跟一个逗号和程序集名称。例如 MyNameSpace.MyObject, MyAssembly.

这应该始终有效。