DictionaryAdapterMeta
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace Castle.Components.DictionaryAdapter
{
[DebuggerDisplay("Type: {Type.FullName,nq}")]
public class DictionaryAdapterMeta
{
private IDictionary extendedProperties;
public Type Type { get; set; }
public object[] Behaviors { get; set; }
public DictionaryDescriptor Descriptor { get; set; }
public IDictionaryAdapterFactory Factory { get; set; }
public IDictionaryInitializer[] Initializers { get; set; }
public IDictionaryMetaInitializer[] MetaInitializers { get; set; }
public IDictionary<string, PropertyDescriptor> Properties { get; set; }
public IDictionary ExtendedProperties {
get {
if (extendedProperties == null)
extendedProperties = new Dictionary<object, object>();
return extendedProperties;
}
}
public DictionaryAdapterMeta(Type type, IDictionaryInitializer[] initializers, IDictionaryMetaInitializer[] metaInitializers, object[] behaviors, IDictionary<string, PropertyDescriptor> properties, DictionaryDescriptor descriptor, IDictionaryAdapterFactory factory)
{
Type = type;
Factory = factory;
Descriptor = descriptor;
Initializers = initializers;
MetaInitializers = metaInitializers;
Behaviors = behaviors;
Properties = properties;
InitializeMeta(factory);
}
private void InitializeMeta(IDictionaryAdapterFactory factory)
{
if (Descriptor != null)
MetaInitializers = MetaInitializers.Prioritize(Descriptor.MetaInitializers).ToArray();
IDictionaryMetaInitializer[] metaInitializers = MetaInitializers;
foreach (IDictionaryMetaInitializer dictionaryMetaInitializer in metaInitializers) {
dictionaryMetaInitializer.Initialize(factory, this);
}
}
}
}