/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="getParameter"></param> /// <param name="restartAppDomainOnChange"></param> /// <returns></returns> public override T GetConfig <T>(IConfigParameter getParameter, bool restartAppDomainOnChange) { Check.Argument.IsNotNull("getParameter", getParameter); Check.Argument.IsAssignableFrom("getParameter", getParameter, typeof(DotNetConfigGetParameter)); T config = GetConfigFromCache <T>(getParameter); if (config == null) { lock (this.SyncLock) { config = GetConfigFromCache <T>(getParameter); if (config == null) { DotNetConfigGetParameter parameter = getParameter as DotNetConfigGetParameter; Check.Argument.IsTrue(parameter.HasFiles, "getParameter", R.ConfigFileNotSpecified); System.Configuration.Configuration configuration = GetConfiguration(parameter.Files[0]); config = configuration.GetSection(parameter.SectionName) as T; Check.Argument.IsNotNull("getParameter", config, R.DotNetConfigCannotBeResolved, parameter.Files[0], parameter.SectionName); AddConfigToCache(getParameter as IConfigParameter, config); SetupWacher(new DotNetConfigChangeWatcher(parameter, restartAppDomainOnChange)); } } } return(config); }
public void Initialize(IConfigParameter parameter) { Verify.ArgumentNotNull(parameter, "parameter"); Parameter = parameter; textBox.Text = parameter.GetValueText(); // because we cannot edit, we don't want to select the contents textBox.Select(0, 0); }
/// <summary> /// 停止监控。 /// </summary> public void StopWatching(IConfigParameter getParameter) { IConfigChangeWatcher configWatcher = GetConfigWatcher(getParameter); if (configWatcher != null) { configWatcher.StopWatching(); } }
/// <summary> /// 获取某入口参数对应配置的监控。 /// </summary> protected IConfigChangeWatcher GetConfigWatcher(IConfigParameter getParameter) { Check.Argument.IsNotNull("getParameter", getParameter); IConfigChangeWatcher configWatcher = null; watcherMappings.TryGetValue(getParameter.GroupName, out configWatcher); return(configWatcher); }
/// <summary> /// 获取配置。 /// </summary> /// <typeparam name="T">配置类型。</typeparam> /// <param name="getParameter">获取配置参数。</param> /// <param name="restartAppDomainOnChange">当配置改变时重新启动应用程序域。</param> /// <returns>配置。</returns> public override T GetMergedConfig <T>(IConfigParameter getParameter, bool restartAppDomainOnChange) { Check.Argument.IsNotNull("getParameter", getParameter); Check.Argument.IsAssignableFrom("getParameter", getParameter, typeof(XmlConfigGetParameter)); T config = GetConfigFromCache <T>(getParameter); if (config == null) { lock (this.SyncLock) { config = GetConfigFromCache <T>(getParameter); if (config == null) { config = new T(); XmlConfigGetParameter cp = getParameter as XmlConfigGetParameter; if (cp.HasFiles) { FileMergeResult mergeResult = new FileMergeResult(new List <string>(cp.Files)); foreach (string file in cp.Files) { try { T splitConfig = Serializer.XmlSerializer.FromFile <T>(file); config.Merge(splitConfig); mergeResult.FilesMerged.Add(file); } catch (Exception ex) { FileMergeFailReason mergeFailReasion = new FileMergeFailReason(); mergeFailReasion.FileName = file; mergeFailReasion.MergeFailReason = ExceptionHelper.GetMessage(ex); mergeResult.FileMergeFailReasons.Add(mergeFailReasion); } } if (!mergeResult.HasFileMerged) { // Logger.Error } else if (!mergeResult.AllFilesMerged) { //Logger.Warning("Framework.Configuration", "XMLConfigProvider", fileMergeResult.ToString()); } AddConfigToCache(getParameter, config); SetupWacher(new XmlConfigChangeWatcher(cp)); } } } } return(config); }
public void Initialize(IConfigParameter parameter) { Verify.ArgumentNotNull(parameter, "parameter"); Parameter = parameter; textBox.Text = parameter.GetValueText(); if (parameter is PasswordParameter) { textBox.PasswordChar = '*'; } }
/// <summary> /// 从缓存中获取配置信息列表。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="getParameter"></param> /// <returns></returns> protected List <T> GetConfigListFromCache <T>(IConfigParameter getParameter) where T : class, new() { object cachedObj = null; if (cachedConfigs.ContainsKey(getParameter.Name)) { cachedObj = cachedConfigs[getParameter.Name]; } return(cachedObj as List <T>); }
/// <summary> /// 从缓存中移除配置。 /// </summary> /// <param name="getParameter">获取配置入口参数。</param> protected void RemoveConfigFromCache(IConfigParameter getParameter) { if (cachedConfigs.ContainsKey(getParameter.Name)) { lock (synObj) { if (cachedConfigs.ContainsKey(getParameter.Name)) { cachedConfigs.Remove(getParameter.Name); } } } }
/// <summary> /// /// </summary> /// <param name="getParameter"></param> /// <param name="handler"></param> public void AddChangeHandler(IConfigParameter getParameter, ConfigChangedEventHandler handler) { ConfigChangedEventHandler callback = eventHandles[getParameter.GroupName] as ConfigChangedEventHandler; if (callback == null) { lock (eventHandlersLock) { callback = eventHandles[getParameter.GroupName] as ConfigChangedEventHandler; if (callback == null) { eventHandles.AddHandler(getParameter.GroupName, handler); } } } }
/// <summary> /// 添加配置到缓存中。 /// </summary> /// <param name="getParameter">获取配置入口参数。</param> /// <param name="config">要缓存的配置。</param> protected void AddConfigToCache(IConfigParameter getParameter, object config) { string cachedKey = getParameter.Name; object cachedObj = null; if (!cachedConfigs.TryGetValue(cachedKey, out cachedObj)) { lock (synObj) { if (!cachedConfigs.TryGetValue(cachedKey, out cachedObj)) { cachedConfigs.Add(cachedKey, config); } } } }
public void Initialize(IConfigParameter parameter) { Verify.ArgumentNotNull(parameter, "parameter"); Parameter = parameter; TextBox.Text = parameter.GetValueText(); }
/// <summary> /// 获取配置。 /// </summary> /// <typeparam name="T">配置对象类型。</typeparam> /// <returns>配置。</returns> public static T GetConfig <T>(IConfigParameter para) where T : class, new() { return(GetConfigSource().GetConfig <T>(para, false)); }
/// <summary> /// /// </summary> /// <param name="configParameter"></param> public ConfigChangeWatcher(IConfigParameter configParameter) : this(configParameter, false) { }
/// <summary> /// 获取配置。 /// </summary> /// <typeparam name="T">配置类型。</typeparam> /// <param name="getParameter">获取配置参数。</param> /// <param name="restartAppDomainOnChange">当配置改变时重新启动应用程序域。</param> /// <returns>配置。</returns> public virtual List <T> GetConfigList <T>(IConfigParameter getParameter, bool restartAppDomainOnChange) where T : class, new() { throw new NotSupportedException(); }
/// <summary> /// 获取配置。 /// </summary> /// <typeparam name="T">配置类型。</typeparam> /// <param name="getParameter">获取配置参数。</param> /// <param name="restartAppDomainOnChange">当配置改变时重新启动应用程序域。</param> /// <returns>配置。</returns> public virtual T GetMergedConfig <T>(IConfigParameter getParameter, bool restartAppDomainOnChange) where T : class, IMergableConfig, new() { throw new NotImplementedException(); }
/// <summary> /// Initializes a new instance of the <see cref="ConfigChangedEventArgs"/> class. /// Constructor /// </summary> /// <param name="getParameter"> /// </param> /// <param name="restartAppDomainOnChange"> /// </param> public ConfigChangedEventArgs(IConfigParameter getParameter, bool restartAppDomainOnChange) { this.getParameter = getParameter; this.restartAppDomainOnChange = restartAppDomainOnChange; }
/// <summary> /// Initializes a new instance of the <see cref="ConfigChangedEventArgs"/> class. /// Constructor /// </summary> /// <param name="getParameter"> /// </param> public ConfigChangedEventArgs(IConfigParameter getParameter) : this(getParameter, false) { }
/// <summary> /// /// </summary> /// <param name="configParameter"></param> /// <param name="restartAppDomainOnChange"></param> public ConfigChangeWatcher(IConfigParameter configParameter, bool restartAppDomainOnChange) { this.configParameter = configParameter; this.restartAppDomainOnChange = restartAppDomainOnChange; }
public bool Apply(IConfigParameter configParameter) { return configParameter.Name.ToLowerInvariant().Contains(_text) || configParameter.Description.ToLowerInvariant().Contains(_text); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="getParameter"></param> /// <param name="restartAppDomainOnChange"></param> /// <returns></returns> public override T GetConfig <T>(IConfigParameter getParameter, bool restartAppDomainOnChange) { Check.Argument.IsNotNull("getParameter", getParameter); Check.Argument.IsAssignableFrom("getParameter", getParameter, typeof(XmlConfigGetParameter)); T config = GetConfigFromCache <T>(getParameter); if (config == null) { lock (this.SyncLock) { config = GetConfigFromCache <T>(getParameter); if (config == null) { XmlConfigGetParameter cp = getParameter as XmlConfigGetParameter; if (cp.Files.Length > 0) { if (cp.Files.Length == 1) { try { config = Serializer.XmlSerializer.FromFile <T>(cp.Files[0]); } catch (Exception ex) { ConfigThrowHelper.ThrowConfigException(ex, R.ConfigFileNotResolved, cp.Files[0], typeof(T).FullName); } } else { try { FileMergeResult fileMergeResult = XmlUtils.MergeFiles(new List <string>(cp.Files)); if (!fileMergeResult.AllFilesMerged) { //Logger.Warning("Framework.Configuration", "XMLConfigProvider", fileMergeResult.ToString()); } if (fileMergeResult.HasFileMerged) { config = Serializer.XmlSerializer.FromSerializedString <T>(fileMergeResult.FileContentMerged); } else { //Logger.Error("Framework.Configuration", "XMLConfigProvider", fileMergeResult.ToString()); } } catch (Exception ex) { ConfigThrowHelper.ThrowConfigException(ex, R.ConfigFileNotResolved, cp.FilePaths, typeof(T).FullName); } } AddConfigToCache(getParameter, config); SetupWacher(new XmlConfigChangeWatcher(cp)); } } } } return(config); }