Ejemplo n.º 1
0
 public MethodHandler(bool confirmationRequired, NormalizedPath n, object instance, MethodInfo method, ParallelCommandMode parallelMode, ParameterInfo[] parameters, Func <bool> enabled)
 {
     ConfirmationRequired = confirmationRequired;
     UniqueName           = n;
     _instance            = instance;
     _method          = method;
     _parameters      = parameters;
     PayloadSignature = parameters.Length == 1
                   ? null
                   : '(' + parameters.Skip(1).Select(p => p.Name).Concatenate() + ')';
     _enabled     = enabled;
     ParallelMode = parallelMode;
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Registers a method that can be called as a command.
        /// </summary>
        /// <param name="confirmationRequired">True to confirm the command before its execution.</param>
        /// <param name="uniqueName">The unique command name.</param>
        /// <param name="o">The object instance that holds the method.</param>
        /// <param name="method">The method.</param>
        /// <param name="parallelMode">Parallel command mode.</param>
        /// <param name="enabled">A companion function that knows how to compute whether the command is enabled or not.</param>
        /// <returns>The registered command handler.</returns>
        public ICommandHandler Register(bool confirmationRequired, NormalizedPath uniqueName, object o, MethodInfo method, ParallelCommandMode parallelMode, Func <bool> enabled = null)
        {
            if (_commands.ContainsKey(uniqueName))
            {
                throw new ArgumentException($"Already registered command '{uniqueName}'.", nameof(uniqueName));
            }
            var parameters = method.GetParameters();

            if (parameters.Length == 0 || !typeof(IActivityMonitor).IsAssignableFrom(parameters[0].ParameterType))
            {
                throw new ArgumentException($"Method {method} for command '{uniqueName}' must have a first IActivityMonitor parameter.", nameof(method));
            }
            var h = new MethodHandler(confirmationRequired, uniqueName, o, method, parallelMode, parameters, enabled);

            _commands.Add(uniqueName, h);
            return(h);
        }