public void ExecuteCommand <TCommand>(object input)
            where TCommand : class
        {
            if (!ModelState.IsValid)
            {
                return;
            }
            var command = new CommandExecutionAdapter <TCommand>(ObjectFactory);

            command.SetInput(input);
            command.Execute();
            var result = command.TryToGetResult <IModifiesModelState>();

            if (result != null)
            {
                result.UpdateModelState(ModelState);
            }
        }
        public TResult ExecuteCommand <TCommand, TResult>(object input)
            where TCommand : class
            where TResult : class
        {
            var command = new CommandExecutionAdapter <TCommand, TResult>(ObjectFactory);

            if (!ModelState.IsValid)
            {
                return(command.GetResult());
            }
            command.SetInput(input);
            command.Execute();
            var result = command.GetResult();

            if (result != null && result is IModifiesModelState)
            {
                ((IModifiesModelState)result).UpdateModelState(ModelState);
            }
            return(result);
        }