public static StateConfiguration <TState, TTrigger> PermitDynamic <TState, TTrigger>(
            this StateConfiguration <TState, TTrigger> config, TTrigger trigger,
            Func <DynamicState <TState> > targetStatePredicate,
            Action onTriggerAction)
        {
            Contract.NotNull(onTriggerAction != null, nameof(onTriggerAction));

            return(config.PermitDynamic(trigger, targetStatePredicate,
                                        t => onTriggerAction()));
        }
        public static StateConfiguration <TState, TTrigger> PermitDynamic <TArgument, TState, TTrigger>(
            this StateConfiguration <TState, TTrigger> config,
            ParameterizedTrigger <TTrigger, TArgument> trigger,
            Func <TArgument, DynamicState <TState> > targetStatePredicate,
            Action <TArgument> onTriggerAction)
        {
            Contract.NotNull(onTriggerAction != null, nameof(onTriggerAction));

            return(config.PermitDynamic(trigger, targetStatePredicate,
                                        (t, a) => onTriggerAction(a)));
        }