public virtual void Initialize(DomainConfiguration configuration) { Type type; List <ActivateOrderedInstanceOfBag> sorting; List <ConfigurableInstanceOfBag> after; type = this.GetType(); sorting = new List <ActivateOrderedInstanceOfBag>(); after = new List <ConfigurableInstanceOfBag>(); foreach (FieldInfo info in type.GetFields(TargetFieldBindingFlags)) { Type fieldType; Type fieldGenericType; object value; ConfigurableInstanceOfBag bag; fieldType = info.FieldType; if (!fieldType.IsGenericType) { continue; } fieldGenericType = info.FieldType.GetGenericTypeDefinition(); if (!typeof(InstanceOf <>).IsAssignableFrom(fieldGenericType)) { continue; } value = info.GetValue(this); if (!(value is ConfigurableInstanceOf)) { continue; } if (value is ActivateOrdered) { ActivateOrderedInstanceOfBag orderedBag; orderedBag = new ActivateOrderedInstanceOfBag(); orderedBag.ActivateOrder = ((ActivateOrdered)value).ActivateOrder; sorting.Add(orderedBag); bag = orderedBag; } else { bag = new ConfigurableInstanceOfBag(); after.Add(bag); } bag.InstanceOf = (ConfigurableInstanceOf)value; if (configuration.Contains(info.Name)) { bag.InstanceSetting = configuration[info.Name]; } else { bag.InstanceSetting = new DomainConfiguration.InstanceSetting( info.Name, bag.InstanceOf.Default, new Dictionary <string, string>()); } } sorting.Sort(); foreach (ConfigurableInstanceOfBag bag in sorting) { bag.InstanceOf.Configure( this, bag.InstanceSetting.Name, bag.InstanceSetting.Properties); } foreach (ConfigurableInstanceOfBag bag in after) { bag.InstanceOf.Configure( this, bag.InstanceSetting.Name, bag.InstanceSetting.Properties); } }