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()); }