我需要创建一个类的实例,同时只有完整的类名(带名称空间)和定义类的程序集的文件名。我知道程序集在当前的工作目录中。应该使用默认构造函数(不带参数),因为它是唯一可用的构造函数。
经过一些谷歌,堆栈溢出和MSDN后,我仍然不确定最佳解决方案是什么。将加载多个程序集,因此使用应用程序域将是好的(?)。
application domain documentation说,我应该使用CreateInstanceAndUnwrap,但我需要完整的程序集名称。据我所知,我只能通过加载程序集来获得它。这似乎效率很低。
哪种方法可以在当前卸载的程序集中创建类的实例?
谢谢!
答案 0 :(得分:2)
如果程序集已在bin文件夹或GAC中,则不必手动加载程序集。
您只需使用Activator.CreateInstance
来实例化对象。
传入CreateInstance
的字符串必须是程序集限定类型名称,即type-name后跟逗号和程序集名称。例如MyNameSpace.MyObject, MyAssembly
。
这应该始终有效。
答案 1 :(得分:1)
我相信你想要Assembly.LoadFrom
。这将通过文件名为您提供程序集,然后可以使用它通过反射来实例化类。
最终,您需要加载程序集,因为它包含定义和实例化类所需的代码。但是,使用AppDomain可以使您处于正确的轨道,因为这将允许您稍后卸载程序集。