IReadProperty <T, TProperty> GetReadProperty <TProperty>(string name) { lock (_properties) { if (_properties.TryGetValue(name, out var property)) { return(property as IReadProperty <T, TProperty>); } if (_propertyIndex.TryGetValue(name, out var propertyInfo)) { if (propertyInfo.PropertyType != typeof(TProperty)) { throw new ArgumentException( $"Property type mismatch, {TypeMetadataCache<TProperty>.ShortName} != {TypeMetadataCache.GetShortName(propertyInfo.PropertyType)}"); } var readProperty = new ReadProperty <T, TProperty>(propertyInfo); _properties[name] = readProperty; return(readProperty); } } throw new ArgumentException($"{TypeMetadataCache<T>.ShortName} does not contain the property: {name}", nameof(name)); }
IReadProperty <T, TProperty> IReadPropertyCache <T> .GetProperty <TProperty>(PropertyInfo propertyInfo) { lock (_properties) { var name = propertyInfo?.Name ?? throw new ArgumentNullException(nameof(propertyInfo)); if (_properties.TryGetValue(name, out var property)) { return(property as IReadProperty <T, TProperty>); } if (propertyInfo.PropertyType != typeof(TProperty)) { throw new ArgumentException( $"Property type mismatch, {TypeMetadataCache<TProperty>.ShortName} != {TypeMetadataCache.GetShortName(propertyInfo.PropertyType)}", nameof(propertyInfo)); } var readProperty = new ReadProperty <T, TProperty>(propertyInfo); _properties[name] = readProperty; return(readProperty); } }
IReadProperty <T, TProperty> IReadPropertyCache <T> .GetProperty <TProperty>(PropertyInfo propertyInfo) { lock (_properties) { if (_properties.TryGetValue(propertyInfo.Name, out var property)) { return(property as IReadProperty <T, TProperty>); } var readProperty = new ReadProperty <T, TProperty>(propertyInfo); _properties[propertyInfo.Name] = readProperty; return(readProperty); } }
IReadProperty <T, TProperty> IReadPropertyCache <T> .GetProperty <TProperty>(string name) { lock (_properties) { if (_properties.TryGetValue(name, out var property)) { return(property as IReadProperty <T, TProperty>); } var readProperty = new ReadProperty <T, TProperty>(name); _properties[name] = readProperty; return(readProperty); } }
IReadProperty <T, TProperty> IReadPropertyCache <T> .GetProperty <TProperty>(string name) { lock (_properties) { if (_properties.TryGetValue(name, out var property)) { return(property as IReadProperty <T, TProperty>); } var writeProperty = new ReadProperty <T, TProperty>(_implementationType, name); _properties[name] = writeProperty; return(writeProperty); } }