/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }