/// <summary> /// 如果当前命令执行上下文中的命令名称在 <paramref name="commandNames"/> 中存在则执行 <paramref name="func"/>。 /// </summary> /// <typeparam name="T">返回值类型。</typeparam> /// <param name="context">命令上下文。</param> /// <param name="func">执行的动作。</param> /// <param name="def">如果不属于 <paramref name="commandNames"/> 返回的默认值。</param> /// <param name="commandNames">命令名称。</param> /// <returns>返回值。</returns> public static T Is <T>(this CommandExecuteContext context, Func <T> func, T def, params string[] commandNames) { if (func == null || !context.IsIn(commandNames)) { return(def); } return(func()); }
/// <summary> /// 如果当前命令执行上下文中的命令名称在 <paramref name="commandNames"/> 中存在则执行 <paramref name="action"/>。 /// </summary> /// <param name="context">命令上下文。</param> /// <param name="action">执行的动作。</param> /// <param name="commandNames">命令名称。</param> public static void Is(this CommandExecuteContext context, Action action, params string[] commandNames) { if (action == null || !context.IsIn(commandNames)) { return; } action(); }
/// <summary> /// 执行命令。 /// </summary> /// <param name="context">命令执行上下文。</param> public abstract void Execute(CommandExecuteContext context);
/// <summary> /// 执行命令出错时执行。 /// </summary> /// <param name="context">命令上下文。</param> /// <param name="exception">异常信息。</param> /// <returns>是否抛出异常,如果需要抛出异常则返回true,否则返回false。</returns> protected internal virtual bool Fail(CommandExecuteContext context, Exception exception) { context.WriteLine("执行语句 {0} 时发生了错误,详细信息:{1}", string.Join(" ", context.Args), exception); return(false); }
/// <summary> /// 命令执行完成之后执行。 /// </summary> /// <param name="context">命令上下文。</param> public virtual void Executed(CommandExecuteContext context) { }
/// <summary> /// 准备执行命令之前时执行。 /// </summary> /// <param name="context">命令执行上下文。</param> protected internal virtual void Executing(CommandExecuteContext context) { }
private static bool IsIn(this CommandExecuteContext context, IEnumerable <string> commandNames) { return(commandNames.Any(i => string.Equals(i, context.CommandName, StringComparison.OrdinalIgnoreCase))); }