예제 #1
0
        internal static IConfigSetting LoadConfigSettingFromAssemblies(Assembly[] coreAssemblies, List <Assembly> assemblies, IConfigSetting appSetting, IConfigSettingRequired setting)
        {
            if (appSetting == null)
            {
                appSetting = ConfigSectionHandler.GetConfig("htb.devfx");
            }

            if (assemblies == null)
            {
                assemblies = new List <Assembly>();
            }

            assemblies = SortAssemblies(assemblies, TypeHelper.GetAssembliesByCustomAttribute(typeof(ConfigResourceAttribute)));
            for (var i = coreAssemblies.Length - 1; i >= 0; i--)
            {
                var coreAssembly = coreAssemblies[i];
                if (assemblies.IndexOf(coreAssembly) != 0)
                {
                    assemblies.Remove(coreAssembly);
                    assemblies.Insert(0, coreAssembly);
                }
            }

            var resources = new List <ConfigResourceAttribute>();

            foreach (var assembly in assemblies)
            {
                var attributes = assembly.GetCustomAttributes(typeof(ConfigResourceAttribute), true) as ConfigResourceAttribute[];
                if (attributes != null && attributes.Length > 0)
                {
                    foreach (var attribute in attributes)
                    {
                        attribute.Assembly = assembly;
                    }
                    var attributeList = new List <ConfigResourceAttribute>(attributes);
                    attributeList.Sort(CompareConfigResourceAttributeByIndex);
                    resources.AddRange(attributeList);
                }
            }

            var rootSetting = CreateFromXmlString("<configuration><htb.devfx /></configuration>");

            foreach (var resource in resources)
            {
                var configSetting = CreateFromXmlSource(resource.Resource, resource.Assembly);
                rootSetting.Merge(configSetting);
            }

            IConfigSetting userRootSetting = null;

            if (setting != null && setting.ConfigSetting != null)
            {
                userRootSetting = setting.ConfigSetting.GetRootSetting();
            }
            if (userRootSetting == null)
            {
                userRootSetting = appSetting;
            }

            if (userRootSetting != null)
            {
                var mergeSetting = rootSetting;
                if (userRootSetting.SettingName == "htb.devfx")
                {
                    mergeSetting = rootSetting["htb.devfx"];
                }
                if (mergeSetting != null)
                {
                    mergeSetting.Merge(userRootSetting);
                }
            }
            return(rootSetting);
        }
예제 #2
0
 internal static IConfigSetting LoadConfigSettingFromAssemblies(Assembly coreAssembly, List <Assembly> assemblies, IConfigSetting appSetting, IConfigSettingRequired setting)
 {
     return(LoadConfigSettingFromAssemblies(new [] { coreAssembly }, assemblies, appSetting, setting));
 }