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

时间:2016-02-22 16:41:44

标签: c# .net reflection .net-assembly

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

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

application domain documentation说,我应该使用CreateInstanceAndUnwrap,但我需要完整的程序集名称。据我所知,我只能通过加载程序集来获得它。这似乎效率很低。

哪种方法可以在当前卸载的程序集中创建类的实例?

谢谢!

2 个答案:

答案 0 :(得分:2)

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

您只需使用Activator.CreateInstance来实例化对象。

传入CreateInstance的字符串必须是程序集限定类型名称,即type-name后跟逗号和程序集名称。例如MyNameSpace.MyObject, MyAssembly

这应该始终有效。

答案 1 :(得分:1)

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

最终,您需要加载程序集,因为它包含定义和实例化类所需的代码。但是,使用AppDomain可以使您处于正确的轨道,因为这将允许您稍后卸载程序集。