面试题答案
一键面试- 加载插件程序集:
- 使用
Assembly.LoadFrom
方法从指定路径加载插件的程序集。例如,如果插件程序集文件名为Plugin.dll
且路径为plugins
目录,可以这样写:
string pluginPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins", "Plugin.dll"); Assembly pluginAssembly = Assembly.LoadFrom(pluginPath);
- 使用
- 获取插件类并实例化:
- 通过反射获取插件程序集中符合条件的类型(假设插件类都继承自一个基类
PluginBase
)。
Type[] types = pluginAssembly.GetTypes(); foreach (Type type in types) { if (typeof(PluginBase).IsAssignableFrom(type) &&!type.IsAbstract) { // 实例化插件类 object pluginInstance = Activator.CreateInstance(type); // 这里可以对实例化的插件对象进行进一步操作 } }
- 通过反射获取插件程序集中符合条件的类型(假设插件类都继承自一个基类
- 调用插件类中的特定方法:
- 假设插件类中有一个
Execute
方法,在获取并实例化插件类后,可以通过反射调用该方法。
MethodInfo executeMethod = type.GetMethod("Execute"); if (executeMethod!= null) { executeMethod.Invoke(pluginInstance, null); }
- 假设插件类中有一个
整个流程需要注意异常处理,例如程序集加载失败、类型获取失败、方法调用失败等情况,通过适当的try - catch
块来捕获并处理异常,以保证程序的健壮性。