/// <summary> /// 从插件容器(及其子容器)中筛选指定的调用类型的插件 /// </summary> /// <param name="container">插件容器</param> /// <param name="invokeType">插件调用类型</param> /// <returns></returns> public static IEnumerable<IPluginItem> QueryPlugins(this IPluginContainer container, EPluginInvokeType invokeType) { return QueryPlugins(container, plugin => plugin.InvokType == invokeType); }
/// <summary> /// 调用相应类型的插件 /// </summary> /// <param name="view"></param> /// <param name="invokeType"></param> public static void InvokePlugins(this IPluginView view, EPluginInvokeType invokeType, object caller = null) { var plugins = view.QueryPlugins(invokeType).ToList(); plugins.ForEach(p => p.Command?.Invoke(caller)); }
/// <summary> /// 从插件视图中筛选指定的调用类型的插件 /// </summary> /// <param name="view">插件视图</param> /// <param name="invokeType">插件调用类型</param> /// <returns></returns> public static IEnumerable<IPluginItem> QueryPlugins(this IPluginView view, EPluginInvokeType invokeType) { return view.Containers.SelectMany(container => QueryPlugins(container, invokeType)); }
/// <summary> /// 调用相应类型的插件 /// </summary> /// <param name="view"></param> /// <param name="invokeType"></param> public static void InvokePlugins(this IPluginView view, IPluginPlan pluginPlan, EPluginInvokeType invokeType) { if (pluginPlan == null) { return; } var pluginView = pluginPlan.Views.First(v => v.Name == view.Name && v.Text == view.Text); var plugins = pluginView.QueryPlugins(invokeType).ToList(); plugins.ForEach(p => p.Command.Invoke(view)); }