Ejemplo n.º 1
0
 /// <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);
 }
Ejemplo n.º 2
0
 /// <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));
 }
Ejemplo n.º 3
0
 /// <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));
 }
Ejemplo n.º 4
0
        /// <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));
        }