public static IPropertyNodeVisitor Create(ObjectMember member, ObjectCallerBase parentHandlerPtr, ObjectVisitorOptions options)
        {
            void MemberValueSyncHandler(object instance) => parentHandlerPtr[member.MemberName] = instance;

            var handler = SafeObjectHandleSwitcher.Switch(options.AlgorithmKind)(member.MemberType).AndSetInstance(parentHandlerPtr.GetObject(member.MemberName));
            var visitor = new InstanceVisitor(handler, member.MemberType, options);

            return(new PropertyNodeVisitor(member, visitor, options, MemberValueSyncHandler));
        }
        public object Repeat(object instance)
        {
            var handler = SafeObjectHandleSwitcher.Switch(AlgorithmKind)(SourceType);

            handler.SetObjInstance(instance);

            _handleHistory?.Invoke(handler);

            return(handler.GetInstance());
        }
        internal MemberValueContractImpl(ObjectMember member, Type declaringType)
        {
            _member             = member ?? throw new ArgumentNullException(nameof(member));
            _lazyCallingHandler = new Lazy <ObjectCallerBase>(() => SafeObjectHandleSwitcher.Switch(AlgorithmKind.Precision)(declaringType));

            DeclaringType = declaringType;
            MemberKind    = member.Kind;
            IsBasicType   = member.MemberType.IsBasicType();

            _reflectorProvider = member.MemberType.GetReflector();
            _attributes        = _reflectorProvider.GetCustomAttributes();
            IncludeAnnotations = HasValidationAnnotationDefined(_attributes);
        }
        public object Repeat(IDictionary <string, object> keyValueCollections)
        {
            var handler = SafeObjectHandleSwitcher.Switch(AlgorithmKind)(SourceType);

            handler.New();

            if (keyValueCollections != null && keyValueCollections.Any())
            {
                foreach (var keyValue in keyValueCollections)
                {
                    handler[keyValue.Key] = keyValue.Value;
                }
            }

            _handleHistory?.Invoke(handler);

            return(handler.GetInstance());
        }