/// <summary>
        /// 获取meta文件的地址和位置
        /// </summary>
        /// <param name="fileSettings">ConfigFilesSetting 类实例</param>
        private static void GetMetaFileSettings(ConfigFilesSetting fileSettings)
        {
            AppSettingsSection section = ConfigurationBroker.GetLocalAppSettingsSection();

            if (section != null)
            {
                if (section.Settings[ConfigurationBroker.MetaConfigurationItem] == null)
                {
                    fileSettings.MetaConfigurationFile = ConfigurationBroker.LocalConfigurationFile;
                }
                else
                {
                    fileSettings.MetaConfigurationFile =
                        EnvironmentHelper.ReplaceEnvironmentVariablesInString(section.Settings[ConfigurationBroker.MetaConfigurationItem].Value);
                }
            }

            if (string.IsNullOrEmpty(fileSettings.MetaConfigurationFile) == true)
            {
                fileSettings.MetaFilePosition      = MetaConfigurationPosition.LocalFile;
                fileSettings.MetaConfigurationFile = ConfigurationBroker.LocalConfigurationFile;
            }
            else
            {
                fileSettings.MetaFilePosition = MetaConfigurationPosition.MetaFile;

                if (false == Path.IsPathRooted(fileSettings.MetaConfigurationFile))
                {
                    fileSettings.MetaConfigurationFile =
                        AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + fileSettings.MetaConfigurationFile;
                }

                ExceptionHelper.FalseThrow(File.Exists(fileSettings.MetaConfigurationFile), Resource.MetaFileNotFound, fileSettings.MetaConfigurationFile);
            }
        }
        /// <summary>
        /// 获取最终 local 和 global 合并后的 Configuration
        /// </summary>
        /// <param name="fileSettings">ConfigFilesSetting 类实例</param>
        /// <param name="globalConfig">返回全局配置的Config</param>
        /// <returns>local 和 global 合并后的 Configuration</returns>
        private static System.Configuration.Configuration GetFinalConfiguration(ConfigFilesSetting fileSettings, out System.Configuration.Configuration globalConfig)
        {
            System.Configuration.Configuration config;

            if (EnvironmentHelper.IsUsingWebConfig)
            {
                config = ConfigurationBroker.GetStandardWebAndGlobalConfiguration(
                    fileSettings.GlobalConfigurationFile,
                    true,
                    out globalConfig,
                    fileSettings.LocalConfigurationFile,
                    fileSettings.MachineConfigurationFile,
                    fileSettings.MetaConfigurationFile);
            }
            else
            {
                config = ConfigurationBroker.GetStandardExeAndGlobalConfiguration(fileSettings.GlobalConfigurationFile,
                                                                                  fileSettings.LocalConfigurationFile,
                                                                                  true,
                                                                                  out globalConfig,
                                                                                  fileSettings.MachineConfigurationFile,
                                                                                  fileSettings.MetaConfigurationFile);
            }

            return(config);
        }
Beispiel #3
0
        /// <summary>
        /// 获取最终的local和global合并后的Configuration
        /// </summary>
        /// <param name="fileSettings">ConfigFilesSetting对象</param>
        /// <returns>local和global合并后的Configuration对象</returns>
        private static System.Configuration.Configuration getFinalConfiguration(ConfigFilesSetting fileSettings)
        {
            System.Configuration.Configuration config = CoreHelper.EnvironmentHelper.Mode == EnumInstanceMode.Web
                                ? ConfigurationBroker.GetStandardWebConfiguration(fileSettings.GlobalConfigurationFile)
                                : ConfigurationBroker.getStandardExeConfiguration(fileSettings.GlobalConfigurationFile,
                                                                                  fileSettings.LocalConfigurationFile);

            return(config);
        }
Beispiel #4
0
        public static ConfigurationSection GetSectionForTimeDependencyTest(string sectionName)
        {
            ConfigurationSection section;

            ConfigFilesSetting settings = LoadFilesSetting();

            System.Configuration.Configuration config = GetFinalConfiguration(settings);
            section = config.GetSection(sectionName);

            if (section == null)
            {
                section = GetSectionFromGroups(sectionName, config.SectionGroups);
            }

            return(section);
        }
Beispiel #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sectionName"></param>
        /// <returns></returns>
        public static ConfigurationSection GetSection(string sectionName)
        {
            ConfigurationSection section = new AnonymousIdentificationSection();
            //实际中应该加上缓存,本次不加

            ConfigFilesSetting settings = loadFilesSetting(null);

            System.Configuration.Configuration config = getFinalConfiguration(settings);
            section = config.GetSection(sectionName);

            if (section == null || section is DefaultSection)
            {
                section = GetSectionFromGroups(sectionName, config.SectionGroups);
            }


            return(section);
        }
        /// <summary>
        /// 加载machine、local配置文件,meta配置文件,meta中的配置节,将其缓存并建立缓存失效依赖。
        /// 查找并在 ConfigFilesSetting 类实例中记录machine、local、meta和global配置文件的地址和
        /// meta配置文件位置(枚举)
        /// </summary>
        /// <returns>ConfigFilesSetting 类实例</returns>
        private static ConfigFilesSetting LoadFilesSetting()
        {
            ConfigFilesSetting settings = new ConfigFilesSetting();

            settings.MachineConfigurationFile = ConfigurationBroker.MachineConfigurationFile;
            settings.LocalConfigurationFile   = ConfigurationBroker.LocalConfigurationFile;
            settings.GlobalConfigurationFile  = ConfigurationBroker.GlobalConfigurationFile;

            MetaConfigurationSourceInstanceSection metaSection = ConfigurationBroker.GetMetaSourceInstanceSection(settings);

            if (metaSection != null)
            {
                string currPath;

                if (EnvironmentHelper.IsUsingWebConfig)
                {
                    currPath = HostingEnvironment.ApplicationVirtualPath;
                }
                else
                {
                    currPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
                }

                settings.GlobalConfigurationFile = EnvironmentHelper.ReplaceEnvironmentVariablesInString(metaSection.Instances.GetMatchedPath(currPath));

                if (string.IsNullOrEmpty(settings.GlobalConfigurationFile))
                {
                    settings.GlobalConfigurationFile = ConfigurationBroker.GlobalConfigurationFile;
                }
                else
                {
                    if (false == Path.IsPathRooted(settings.GlobalConfigurationFile))
                    {
                        settings.GlobalConfigurationFile =
                            AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + settings.GlobalConfigurationFile;
                    }

                    ExceptionHelper.FalseThrow(File.Exists(settings.GlobalConfigurationFile), Resource.GlobalFileNotFound, settings.GlobalConfigurationFile);
                }
            }

            return(settings);
        }
Beispiel #7
0
        /// <summary>
        /// 按节点名称从配置信息中取得节点,并将节点信息缓存,建立文件依赖
        /// </summary>
        /// <param name="sectionName">节点名称</param>
        /// <returns>配置节点</returns>
        /// <remarks>
        /// 按名称获取配置节点信息。返回ConfigurationSection的派生类实体,实体类需由用户自定义。
        /// <code source="..\Framework\TestProjects\Deluxeworks.Library.WebTest\Configuration\Default.aspx.cs" region="Using Broker" lang="cs" title="使用配置管理" />
        /// </remarks>
        public static ConfigurationSection GetSection(string sectionName)
        {
            ConfigurationSection section;

            if (false == ConfigurationSectionCache.Instance.TryGetValue(sectionName, out section))
            {
                ConfigFilesSetting settings = LoadFilesSetting();

                System.Configuration.Configuration config = GetFinalConfiguration(settings);
                section = config.GetSection(sectionName);

                // 在Configuration对象中不能直接拿到Section对象时,遍历所有Group查找Section
                if (section == null || section is DefaultSection)
                {
                    section = GetSectionFromGroups(sectionName, config.SectionGroups);
                }

                FileCacheDependency dependency = new FileCacheDependency(
                    true,
                    settings.MachineConfigurationFile,
                    settings.LocalConfigurationFile,
                    settings.MetaConfigurationFile,
                    settings.GlobalConfigurationFile);

                ConfigurationSectionCache.Instance.Add(sectionName, section, dependency);
#if DELUXEWORKSTEST
                // 测试使用
                ConfigurationBroker.sectionReadFrom = ReadFrom.ReadFromFile;
#endif
            }
            else
            {
#if DELUXEWORKSTEST
                // 测试使用
                ConfigurationBroker.sectionReadFrom = ReadFrom.ReadFromCache;
#endif
            }

            return(section);
        }
        /// <summary>
        /// 按节点名称从配置信息中取得节点,并将节点信息缓存,建立文件依赖
        /// </summary>
        /// <param name="sectionName">节点名称</param>
        /// <param name="checkNullSection">如果返回null,是否抛出异常</param>
        /// <returns>配置节点</returns>
        /// <remarks>
        /// 按名称获取配置节点信息。返回ConfigurationSection的派生类实体,实体类需由用户自定义。
        /// <code source="..\Framework\TestProjects\Deluxeworks.Library.WebTest\Configuration\Default.aspx.cs" region="Using Broker" lang="cs" title="使用配置管理" />
        /// </remarks>
        public static ConfigurationSection GetSection(string sectionName, bool checkNullSection = false)
        {
            ConfigurationSection section;

            if (false == ConfigurationSectionCache.Instance.TryGetValue(sectionName, out section))
            {
                ConfigFilesSetting settings = LoadFilesSetting();

                System.Configuration.Configuration globalConfig = null;
                System.Configuration.Configuration config       = GetFinalConfiguration(settings, out globalConfig);

                section = config.GetSectionRecursively(sectionName);

                List <string> dependentFiles = new List <string>();

                dependentFiles.Add(settings.MachineConfigurationFile);
                dependentFiles.Add(settings.LocalConfigurationFile);
                dependentFiles.Add(settings.MetaConfigurationFile);
                dependentFiles.Add(settings.GlobalConfigurationFile);

                string configSourceFile = globalConfig.GetSectionRelativeFile(section);

                if (configSourceFile.IsNotEmpty())
                {
                    dependentFiles.Add(configSourceFile);
                }

                FileCacheDependency dependency = new FileCacheDependency(true, dependentFiles.ToArray());

                ConfigurationSectionCache.Instance.Add(sectionName, section, dependency);
            }

            if (checkNullSection)
            {
                section.CheckSectionNotNull(sectionName);
            }

            return(section);
        }
Beispiel #9
0
        /// <summary>
        /// 加载所有的配置文件
        /// </summary>
        /// <param name="globalConfigurationFile">全局配置文件。如果使用默认的配置文件则传null即可</param>
        /// <returns>ConfigFilesSetting对象</returns>
        private static ConfigFilesSetting loadFilesSetting(string globalConfigurationFile)
        {
            bool globalEmpty            = string.IsNullOrWhiteSpace(globalConfigurationFile);
            ConfigFilesSetting settings = new ConfigFilesSetting()
            {
                MachineConfigurationFile = ConfigurationBroker.MachineConfigurationFile,
                GlobalConfigurationFile  = globalEmpty ? ConfigurationBroker.GlobalConfigurationFile : globalConfigurationFile,
                LocalConfigurationFile   = ConfigurationBroker.LocalConfigurationFile
            };

            if (globalEmpty == false)
            {
                return(settings);
            }

            //此处待增加外部指定配置文件
            MetaSourceMappingsConfigurationSection metaSourceMappingsSection = GetMetaSourceMappingSection(settings);

            if (metaSourceMappingsSection != null)
            {
                settings.GlobalConfigurationFile =
                    ReplaceEnvironmentVariablesInFilePath(metaSourceMappingsSection.Instances.MatchedPath());
                if (string.IsNullOrWhiteSpace(settings.GlobalConfigurationFile))
                {
                    settings.GlobalConfigurationFile = GlobalConfigurationFile;
                }
                else
                {
                    if (Path.IsPathRooted(settings.GlobalConfigurationFile))
                    {
                        settings.GlobalConfigurationFile = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + settings.GlobalConfigurationFile;
                    }
                    CoreHelper.ExceptionHelper.FalseThrow <FileNotFoundException>(File.Exists(settings.GlobalConfigurationFile), Resource.CanNotFindNamedConfigElement, settings.GlobalConfigurationFile);
                }
            }
            return(settings);
        }
Beispiel #10
0
        /// <summary>
        /// 初始化ConfigFilesSetting对象。
        ///
        /// </summary>
        private static void InitConfigFileSettings(ConfigFilesSetting filesSetting)
        {
            AppSettingsSection section = GetLocalAppSettingsSection();

            if (section != null)
            {
                filesSetting.MetaConfigurationFile = section.Settings[MetaConfigurationItem] == null
                                        ? ""
                                        : ReplaceEnvironmentVariablesInFilePath(section.Settings[MetaConfigurationItem].Value);
            }
            if (string.IsNullOrWhiteSpace(filesSetting.MetaConfigurationFile))
            {
                filesSetting.MetaConfigurationFile = LocalConfigurationFile;
                filesSetting.MetaFilePosition      = MetaConfigurationPosition.LocalFile;
                return;
            }
            filesSetting.MetaFilePosition = MetaConfigurationPosition.MetaFile;
            if (false == Path.IsPathRooted(filesSetting.MetaConfigurationFile))
            {
                filesSetting.MetaConfigurationFile = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" +
                                                     filesSetting.MetaConfigurationFile;
            }
            CoreHelper.ExceptionHelper.FalseThrow(File.Exists(filesSetting.MetaConfigurationFile), Resource.MetaFileNotFound, filesSetting.MetaConfigurationFile);
        }
Beispiel #11
0
        /// <summary>
        /// 获取最终 local 和 global 合并后的 Configuration
        /// </summary>
        /// <param name="fileSettings">ConfigFilesSetting 类实例</param>
        /// <returns>local 和 global 合并后的 Configuration</returns>
        private static System.Configuration.Configuration GetFinalConfiguration(ConfigFilesSetting fileSettings)
        {
            System.Configuration.Configuration config;

            if (EnvironmentHelper.Mode == InstanceMode.Web)
            {
                config = ConfigurationBroker.GetStandardWebConfiguration(
                    fileSettings.GlobalConfigurationFile,
                    true,
                    fileSettings.LocalConfigurationFile,
                    fileSettings.MachineConfigurationFile,
                    fileSettings.MetaConfigurationFile);
            }
            else
            {
                config = ConfigurationBroker.GetStandardExeConfiguration(fileSettings.GlobalConfigurationFile,
                                                                         fileSettings.LocalConfigurationFile,
                                                                         true,
                                                                         fileSettings.MachineConfigurationFile,
                                                                         fileSettings.MetaConfigurationFile);
            }

            return(config);
        }
Beispiel #12
0
        /// <summary>
        /// 从单独的Meta.config文件中读取Meta配置
        /// </summary>
        /// <param name="settings"></param>
        /// <returns></returns>
        private static MetaSourceMappingsConfigurationSection LoadMetaSourceInstanceSectionFromMetaFile(ConfigFilesSetting settings)
        {
            System.Configuration.Configuration config = GetSingleFileConfiguration(settings.MetaConfigurationFile);

            MetaConfigurationSectionGroup group =
                config.GetSectionGroup(MetaConfigurationSectionGroupItem) as MetaConfigurationSectionGroup;
            MetaSourceMappingsConfigurationSection section = null;

            if (group != null)
            {
                section = group.SourceMappings;
            }
            return(section);
        }
Beispiel #13
0
        /// <summary>
        /// 从本地config文件中读取meta配置
        /// </summary>
        /// <param name="settings"></param>
        /// <returns></returns>
        private static MetaSourceMappingsConfigurationSection LoadMetaSourceInstanceSectionFromLocal(ConfigFilesSetting settings)
        {
            System.Configuration.Configuration config = CoreHelper.EnvironmentHelper.Mode == EnumInstanceMode.Web
                                ? GetStandardWebConfiguration(settings.MetaConfigurationFile)
                                : getStandardExeConfiguration(settings.MachineConfigurationFile, LocalConfigurationFile);

            MetaConfigurationSectionGroup group =
                config.GetSectionGroup(MetaConfigurationSectionGroupItem) as MetaConfigurationSectionGroup;
            MetaSourceMappingsConfigurationSection section = null;

            if (group != null)
            {
                section = group.SourceMappings;
            }
            return(section);
        }
Beispiel #14
0
        /// <summary>
        /// 从单独的meta.config文件中读取meta配置
        /// </summary>
        /// <param name="fileSettings">ConfigFilesSetting 实体</param>
        /// <returns>MetaConfigurationSourceInstanceSection 实体</returns>
        private static MetaConfigurationSourceInstanceSection LoadMetaSourceInstanceSectionFromMetaFile(ConfigFilesSetting fileSettings)
        {
            System.Configuration.Configuration config = ConfigurationBroker.GetSingleFileConfiguration(
                fileSettings.MetaConfigurationFile,
                true,
                fileSettings.MachineConfigurationFile,
                fileSettings.LocalConfigurationFile);

            MetaConfigurationSectionGroup group =
                config.GetSectionGroup(ConfigurationBroker.MetaConfigurationSectionGroupItem) as MetaConfigurationSectionGroup;

            MetaConfigurationSourceInstanceSection section = null;

            if (group != null)
            {
                section = group.SourceConfigurationMapping;
            }

            return(section);
        }
Beispiel #15
0
        /// <summary>
        /// 从本地config文件中读取meta配置
        /// </summary>
        /// <param name="fileSettings">ConfigFilesSetting 类实例</param>
        /// <returns>MetaConfigurationSourceInstanceSection 实体</returns>
        private static MetaConfigurationSourceInstanceSection LoadMetaSourceInstanceSectionFromLocal(ConfigFilesSetting fileSettings)
        {
            System.Configuration.Configuration config;

            if (EnvironmentHelper.IsUsingWebConfig)
            {
                config = ConfigurationBroker.GetStandardWebConfiguration(fileSettings.MachineConfigurationFile, true);
            }
            else
            {
                config = ConfigurationBroker.GetStandardExeConfiguration(fileSettings.MachineConfigurationFile, fileSettings.LocalConfigurationFile, true);
            }

            MetaConfigurationSectionGroup group =
                (MetaConfigurationSectionGroup)config.GetSectionGroup(ConfigurationBroker.MetaConfigurationSectionGroupItem);
            MetaConfigurationSourceInstanceSection section = null;

            if (group != null)
            {
                section = group.SourceConfigurationMapping;
            }

            return(section);
        }
Beispiel #16
0
        /// <summary>
        /// 获取meta配置中的 sourceMappings 节点
        /// </summary>
        /// <param name="fileSettings">ConfigFilesSetting 类实例</param>
        /// <returns>meta配置中的 sourceMappings 节点</returns>
        private static MetaConfigurationSourceInstanceSection GetMetaSourceInstanceSection(ConfigFilesSetting fileSettings)
        {
            ConfigurationSection section;

            string cacheKey = ConfigurationBroker.CreateConfigurationCacheKey(fileSettings.MachineConfigurationFile,
                                                                              MetaConfigurationSourceInstanceSection.Name);

            if (ConfigurationSectionCache.Instance.TryGetValue(cacheKey, out section) == false)
            {
                ConfigurationBroker.GetMetaFileSettings(fileSettings);

                if (fileSettings.MetaFilePosition == MetaConfigurationPosition.LocalFile)
                {
                    section = ConfigurationBroker.LoadMetaSourceInstanceSectionFromLocal(fileSettings);
                }
                else
                {
                    section = ConfigurationBroker.LoadMetaSourceInstanceSectionFromMetaFile(fileSettings);
                }

                FileCacheDependency fileDependency = new FileCacheDependency(
                    true,
                    fileSettings.MachineConfigurationFile,
                    fileSettings.LocalConfigurationFile,
                    fileSettings.MetaConfigurationFile);

                SlidingTimeDependency timeDependency = new SlidingTimeDependency(ConfigurationBroker.SlidingTime);

                ConfigurationSectionCache.Instance.Add(cacheKey, section, new MixedDependency(fileDependency, timeDependency));
            }

            return((MetaConfigurationSourceInstanceSection)section);
        }
Beispiel #17
0
        /// <summary>
        /// 获取Meta配置中的sourceMappings节点
        /// </summary>
        /// <param name="settings"></param>
        /// <returns></returns>
        private static MetaSourceMappingsConfigurationSection GetMetaSourceMappingSection(ConfigFilesSetting settings)
        {
            ConfigurationSection section;

            InitConfigFileSettings(settings);

            section = settings.MetaFilePosition == MetaConfigurationPosition.LocalFile
                                ? LoadMetaSourceInstanceSectionFromLocal(settings)
                                : LoadMetaSourceInstanceSectionFromMetaFile(settings);
            return(section as MetaSourceMappingsConfigurationSection);
        }