public static StaticTypeLeoVisitor <T> CreateForStaticType <T, TStrategy>(AlgorithmKind kind, bool liteMode, bool strictMode)
            where TStrategy : class, ILeoValidationStrategy <T>, new()
        {
            var handler = UnsafeLeoHandleSwitcher.Switch <T>(kind)().With <T>();
            var visitor = new StaticTypeLeoVisitor <T>(handler, kind, liteMode, strictMode);

            visitor.ValidationEntry.SetStrategy <TStrategy>();
            return(visitor);
        }
        public static StaticTypeLeoVisitor CreateForStaticType <TStrategy>(Type type, AlgorithmKind kind, bool liteMode, TStrategy strategy, bool strictMode)
            where TStrategy : class, ILeoValidationStrategy, new()
        {
            var handler = SafeLeoHandleSwitcher.Switch(kind)(type);
            var visitor = new StaticTypeLeoVisitor(handler, type, kind, liteMode, strictMode);

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