public static FutureInstanceVisitor <T> CreateForFutureInstance <T, TStrategy>(AlgorithmKind kind, bool repeatable, bool liteMode, bool strictMode, IDictionary <string, object> initialValues = null)
            where TStrategy : class, ILeoValidationStrategy <T>, new()
        {
            var handler = UnsafeLeoHandleSwitcher.Switch <T>(kind)().With <T>();
            var visitor = new FutureInstanceVisitor <T>(handler, kind, repeatable, initialValues, liteMode, strictMode);

            visitor.ValidationEntry.SetStrategy <TStrategy>();
            return(visitor);
        }
        public static FutureInstanceVisitor CreateForFutureInstance <TStrategy>(Type type, AlgorithmKind kind, bool repeatable, bool liteMode, TStrategy strategy, bool strictMode, IDictionary <string, object> initialValues = null)
            where TStrategy : class, ILeoValidationStrategy, new()
        {
            var handler = SafeLeoHandleSwitcher.Switch(kind)(type);
            var visitor = new FutureInstanceVisitor(handler, type, kind, repeatable, initialValues, liteMode, strictMode);

            visitor.ValidationEntry.SetStrategy(strategy);
            return(visitor);
        }