public static bool Check <T>(out Func <ObjectCallerBase> callingHandler)
        {
            callingHandler = default;

            if (DynamicServiceTypeHelper.IsSupportedDynamicType <T>())
            {
                callingHandler = DynamicServiceSlimObjectCallerBuilder <T> .Ctor;
                return(true);
            }

            if (TupleServiceTypeHelper.IsSupportedTupleType <T>())
            {
                callingHandler = TupleServiceSlimObjectCallerBuilder <T> .Ctor;
                return(true);
            }

#if !NETFRAMEWORK
            if (AnonymousServiceTypeHelper.IsSupportedAnonymousType <T>())
            {
                callingHandler = AnonymousServiceSlimObjectCallerBuilder <T> .Ctor;
                return(true);
            }
#endif

            return(false);
        }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 ExpandoObject 创建对象访问器
            /// </summary>
            /// <param name="initialValues"></param>
            /// <param name="options"></param>
            /// <returns></returns>
            public static IObjectVisitor CreateForExpandoObject(IDictionary <string, object> initialValues, ObjectVisitorOptions options)
            {
                var type    = typeof(ExpandoObject);
                var handler = (ExpandoObjectSlimObjectCaller)DynamicServiceTypeHelper.Create(type);

                return(new FutureInstanceVisitor(handler, type, options, initialValues));
            }
        public static bool Check(Type type, out ObjectCallerBase caller)
        {
            if (type is null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            caller = default;

            if (DynamicServiceTypeHelper.IsSupportedDynamicType(type))
            {
                caller = DynamicServiceSlimObjectCallerBuilder.Ctor(type);
                return(true);
            }

            if (TupleServiceTypeHelper.IsSupportedTupleType(type))
            {
                caller = TupleServiceSlimObjectCallerBuilder.Ctor(type);
                return(true);
            }

#if !NETFRAMEWORK
            if (AnonymousServiceTypeHelper.IsSupportedAnonymousType(type))
            {
                caller = AnonymousServiceSlimObjectCallerBuilder.Ctor(type);
                return(true);
            }
#endif

            return(false);
        }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 ExpandoObject 创建对象访问器
            /// </summary>
            /// <param name="options"></param>
            /// <returns></returns>
            public static IObjectVisitor CreateForExpandoObject(ObjectVisitorOptions options)
            {
                var type    = typeof(ExpandoObject);
                var handler = (ExpandoObjectSlimObjectCaller)DynamicServiceTypeHelper.Create(type);

                return(new FutureInstanceVisitor(handler, type, options));
            }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 ExpandoObject 创建对象访问器
            /// </summary>
            /// <param name="initialValues"></param>
            /// <param name="repeatable"></param>
            /// <param name="strictMode"></param>
            /// <returns></returns>
            public static IObjectVisitor CreateForExpandoObject(IDictionary <string, object> initialValues, bool repeatable = RpMode.REPEATABLE, bool strictMode = StMode.NORMALE)
            {
                var type    = typeof(ExpandoObject);
                var options = ObjectVisitor.FillWith(AlgorithmKind.Precision, repeatable, strictMode);
                var handler = (ExpandoObjectSlimObjectCaller)DynamicServiceTypeHelper.Create(type);

                return(new FutureInstanceVisitor(handler, type, options, initialValues));
            }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 ExpandoObject 创建对象访问器
            /// </summary>
            /// <param name="instance"></param>
            /// <param name="repeatable"></param>
            /// <param name="strictMode"></param>
            /// <returns></returns>
            public static IObjectVisitor CreateForExpandoObject(ExpandoObject instance, bool repeatable = RpMode.REPEATABLE, bool strictMode = StMode.NORMALE)
            {
                var type    = typeof(ExpandoObject);
                var options = ObjectVisitor.FillWith(AlgorithmKind.Precision, repeatable, strictMode);
                var handler = ((ExpandoObjectSlimObjectCaller)DynamicServiceTypeHelper.Create(type)).AndSetExpandoObject(instance);

                return(new InstanceVisitor(handler, type, options));
            }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 DynamicObject 创建对象访问器
            /// </summary>
            /// <param name="type"></param>
            /// <param name="initialValues"></param>
            /// <param name="options"></param>
            /// <returns></returns>
            public static IObjectVisitor CreateForDynamicObject(Type type, IDictionary <string, object> initialValues, ObjectVisitorOptions options)
            {
                var handler = DynamicServiceTypeHelper.Create(type);

                if (type.IsAbstract && type.IsSealed)
                {
                    return(new StaticTypeObjectVisitor(handler, type, options));
                }
                return(new FutureInstanceVisitor(handler, type, options, initialValues));
            }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 DynamicObject 创建对象访问器
            /// </summary>
            /// <param name="type"></param>
            /// <param name="instance"></param>
            /// <param name="options"></param>
            /// <returns></returns>
            public static IObjectVisitor CreateForDynamicObject(Type type, DynamicObject instance, ObjectVisitorOptions options)
            {
                var handler = DynamicServiceTypeHelper.Create(type).AndSetDynamicObject(instance);

                if (type.IsAbstract && type.IsSealed)
                {
                    return(new StaticTypeObjectVisitor(handler, type, options));
                }
                return(new InstanceVisitor(handler, type, options));
            }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 DynamicObject 创建对象访问器
            /// </summary>
            /// <param name="type"></param>
            /// <param name="initialValues"></param>
            /// <param name="repeatable"></param>
            /// <param name="strictMode"></param>
            /// <returns></returns>
            public static IObjectVisitor CreateForDynamicObject(Type type, IDictionary <string, object> initialValues, bool repeatable = RpMode.REPEATABLE, bool strictMode = StMode.NORMALE)
            {
                var options = ObjectVisitor.FillWith(AlgorithmKind.Precision, repeatable, strictMode);
                var handler = DynamicServiceTypeHelper.Create(type);

                if (type.IsAbstract && type.IsSealed)
                {
                    return(new StaticTypeObjectVisitor(handler, type, options));
                }
                return(new FutureInstanceVisitor(handler, type, options, initialValues));
            }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 DynamicObject 创建对象访问器
            /// </summary>
            /// <param name="initialValues"></param>
            /// <param name="options"></param>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public static IObjectVisitor CreateForDynamicObject <T>(IDictionary <string, object> initialValues, ObjectVisitorOptions options)
                where T : DynamicObject, new()
            {
                var handler = DynamicServiceTypeHelper.Create <T>();
                var type    = typeof(T);

                if (type.IsAbstract && type.IsSealed)
                {
                    return(new StaticTypeObjectVisitor <T>(handler, options));
                }
                return(new FutureInstanceVisitor <T>(handler, options, initialValues));
            }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 DynamicObject 创建对象访问器
            /// </summary>
            /// <param name="instance"></param>
            /// <param name="options"></param>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public static IObjectVisitor CreateForDynamicObject <T>(T instance, ObjectVisitorOptions options)
                where T : DynamicObject, new()
            {
                var handler = DynamicServiceTypeHelper.Create <T>().AndSetDynamicObject(instance);
                var type    = typeof(T);

                if (type.IsAbstract && type.IsSealed)
                {
                    return(new StaticTypeObjectVisitor <T>(handler, options));
                }
                return(new InstanceVisitor <T>(handler, options));
            }
            /// <summary>
            /// Create for ExpandoObject <br />
            /// 为 DynamicObject 创建对象访问器
            /// </summary>
            /// <param name="repeatable"></param>
            /// <param name="strictMode"></param>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public static IObjectVisitor CreateForDynamicObject <T>(bool repeatable = RpMode.REPEATABLE, bool strictMode = StMode.NORMALE)
                where T : DynamicObject, new()
            {
                var options = ObjectVisitor.FillWith(AlgorithmKind.Precision, repeatable, strictMode);
                var handler = DynamicServiceTypeHelper.Create <T>();
                var type    = typeof(T);

                if (type.IsAbstract && type.IsSealed)
                {
                    return(new StaticTypeObjectVisitor <T>(handler, options));
                }
                return(new FutureInstanceVisitor <T>(handler, options));
            }