/// <summary> /// 在运行时,根据需要加载某个程序集对应的插件。 /// 该插件需要在配置文件中提前进行配置。 /// </summary> /// <param name="assembly"></param> public static void LoadPlugin(Assembly assembly) { //已经加载过的插件,不再加载。 if (_allPlugins.Find(assembly) != null) { return; } PluginType pluginType = PluginType.Domain; IPluginConfig pluginFound = null; //domain plugins. IPluginConfig[] configPlugins = GetDomainPluginsConfig(); for (int i = 0, c = configPlugins.Length; i < c; i++) { var pluginSection = configPlugins[i]; if (pluginSection.LoadType == PluginLoadType.AtStartup) { continue; } if (IsPluginOfAssembly(pluginSection.Plugin, assembly)) { pluginFound = pluginSection; break; } } //ui plugins. if (pluginFound == null && _location.IsUI) { configPlugins = GetUIPluginsConfig(); for (int i = 0, c = configPlugins.Length; i < c; i++) { var pluginSection = configPlugins[i]; if (pluginSection.LoadType == PluginLoadType.AtStartup) { continue; } if (IsPluginOfAssembly(pluginSection.Plugin, assembly)) { pluginFound = pluginSection; pluginType = PluginType.UI; break; } } } if (pluginFound == null) { throw new InvalidProgramException($"插件 {assembly.GetName().Name } 需要在配置文件中提前进行配置。"); } LoadRuntimePlugin(pluginFound.Plugin, pluginType, false); }