<PackageReference Include="Castle.Core" Version="3.0.0.3001" />

DictionaryAdapterInstance

using System; using System.Collections; using System.Collections.Generic; using System.Linq; namespace Castle.Components.DictionaryAdapter { public class DictionaryAdapterInstance { private IDictionary extendedProperties; private List<IDictionaryCopyStrategy> copyStrategies; internal int? OldHashCode { get; set; } public IDictionary Dictionary { get; set; } public PropertyDescriptor Descriptor { get; set; } public IDictionaryAdapterFactory Factory { get; set; } public IDictionaryInitializer[] Initializers { get; set; } public IDictionary<string, PropertyDescriptor> Properties { get; set; } public IDictionaryEqualityHashCodeStrategy EqualityHashCodeStrategy { get; set; } public IDictionaryCreateStrategy CreateStrategy { get; set; } public IDictionaryCoerceStrategy CoerceStrategy { get; set; } public IEnumerable<IDictionaryCopyStrategy> CopyStrategies => copyStrategies ?? Enumerable.Empty<IDictionaryCopyStrategy>(); public IDictionary ExtendedProperties { get { if (extendedProperties == null) extendedProperties = new Dictionary<object, object>(); return extendedProperties; } } public DictionaryAdapterInstance(IDictionary dictionary, DictionaryAdapterMeta meta, PropertyDescriptor descriptor, IDictionaryAdapterFactory factory) { Dictionary = dictionary; Descriptor = descriptor; Factory = factory; Properties = meta.Properties; Initializers = meta.Initializers; MergeBehaviorOverrides(meta); } public void AddCopyStrategy(IDictionaryCopyStrategy copyStrategy) { if (copyStrategy == null) throw new ArgumentNullException("copyStrategy"); if (copyStrategies == null) copyStrategies = new List<IDictionaryCopyStrategy>(); copyStrategies.Add(copyStrategy); } private void MergeBehaviorOverrides(DictionaryAdapterMeta meta) { if (Descriptor != null) { DictionaryDescriptor dictionaryDescriptor = Descriptor as DictionaryDescriptor; if (dictionaryDescriptor != null) Initializers = Initializers.Prioritize(dictionaryDescriptor.Initializers).ToArray(); Properties = new Dictionary<string, PropertyDescriptor>(); foreach (KeyValuePair<string, PropertyDescriptor> property in meta.Properties) { PropertyDescriptor value = property.Value; PropertyDescriptor value2 = new PropertyDescriptor(value, false).AddKeyBuilders(value.KeyBuilders.Prioritize(Descriptor.KeyBuilders)).AddGetters(value.Getters.Prioritize(Descriptor.Getters)).AddSetters(value.Setters.Prioritize(Descriptor.Setters)); Properties.Add(property.Key, value2); } } } } }