运行时动态加载程序集和实例化类
仅知道DLL文件名和类名,能否在运行时实例化一个对象,而无需在项目中显式引用该程序集?此类通常实现一个接口,允许在实例化后进行类型转换。
程序集名称: library.dll 类型名称: Company.Project.Classname
无文件路径
由于没有绝对DLL路径,因此无法使用Assembly.LoadFile
。DLL可能位于应用程序根目录、system32或GAC中。
解决方案
可以实现。使用Assembly.LoadFrom
将程序集加载到内存中。然后,使用Activator.CreateInstance
生成所需类型的实例。首先使用反射查找类型。
<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("MyNice.dll"); Type type = assembly.GetType("MyType"); object instanceOfMyType = Activator.CreateInstance(type);</code>
改进的解决方案
给定程序集文件名和类型名,Activator.CreateInstance(assemblyName, typeName)
可以解析为一个类型。这可以用try/catch块包装以进行错误处理。如果失败,则搜索可能存在其他程序集的目录,并根据需要应用先前的方法。
以上是我可以在运行时实例化一个类,只知道它的 DLL 和类型名称吗?的详细内容。更多信息请关注PHP中文网其他相关文章!