Beispiel #1
0
        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);
            }
        }