/// <summary> /// 根据应用程序配置,创建文本序列化器。 /// </summary> /// <param name="configName">应用程序配置项的名称。</param> /// <returns><paramref name="configName"/>缺省时,如果应用程序未配置,则为 <see cref="MemoryCacheManager"/>,否则为配置项对应的 <see cref="ICacheManager"/> 实例。</returns> public static ITextSerializer CreateSerializer(string configName = null) { ITextSerializer serializer; IConfigurationSettingItem setting = null; var section = ConfigurationUnity.GetSection <SerializerConfigurationSection>(); if (section != null && section.Factory != null) { serializer = section.Factory.CreateInstance(configName) as ITextSerializer; if (serializer != null) { return(serializer); } } if (string.IsNullOrEmpty(configName)) { if (section == null || (setting = section.GetDefault()) == null) { return(null); } } else if (section != null) { setting = section.GetSetting(configName); } if (setting == null) { return(null); } return(ConfigurationUnity.CreateInstance <SerializerConfigurationSetting, ITextSerializer>(setting, s => s.SerializerType)); }
/// <summary> /// 根据提供的配置创建实例对象。 /// </summary> /// <typeparam name="TSetting"></typeparam> /// <typeparam name="TInstance"></typeparam> /// <param name="setting"></param> /// <param name="typeFunc"></param> /// <returns></returns> public static TInstance CreateInstance <TSetting, TInstance>(IConfigurationSettingItem setting, Func <TSetting, Type> typeFunc) where TSetting : class, IConfigurationSettingItem { var relSetting = setting as TSetting; IConfigurationSettingItem extendSetting = null; if (setting is ExtendConfigurationSetting wsetting) { relSetting = wsetting.Base as TSetting; extendSetting = wsetting.Extend; } if (relSetting == null || typeFunc(relSetting) == null) { return(default(TInstance)); } var instance = typeFunc(relSetting).New <TInstance>(); if (instance == null) { return(default(TInstance)); } if (extendSetting != null) { instance.As <IConfigurationSettingHostService>(s => AttachSetting(s, extendSetting)); } return(instance); }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { this.setting = (RedisCacheSetting)setting; if (!string.IsNullOrEmpty(this.setting.ConnectionString)) { options = ConfigurationOptions.Parse(this.setting.ConnectionString); } else { options = new ConfigurationOptions { DefaultDatabase = this.setting.DefaultDb, Password = this.setting.Password, ConnectTimeout = this.setting.ConnectTimeout, AllowAdmin = true, Proxy = this.setting.Twemproxy ? Proxy.Twemproxy : Proxy.None }; foreach (var host in this.setting.Hosts) { if (host.Port == 0) { options.EndPoints.Add(host.Server); } else { options.EndPoints.Add(host.Server, host.Port); } } } }
/// <summary> /// 根据应用程序配置,创建日志管理器。 /// </summary> /// <param name="configName">应用程序配置项的名称。</param> /// <returns><paramref name="configName"/>缺省时,如果应用程序未配置,则为 <see cref="DefaultLogger"/>,否则为配置项对应的 <see cref="ILogger"/> 实例。</returns> public static ILogger CreateLogger(string configName = null) { ILogger logger; IConfigurationSettingItem setting = null; var section = ConfigurationUnity.GetSection <LoggingConfigurationSection>(); if (section != null && section.Factory != null) { logger = section.Factory.CreateInstance(configName) as ILogger; if (logger != null) { return(logger); } } if (string.IsNullOrEmpty(configName)) { if (section == null || (setting = section.GetDefault()) == null) { return(DefaultLogger.Instance); } } else if (section != null) { setting = section.GetSetting(configName); } if (setting == null) { return(null); } return(ConfigurationUnity.CreateInstance <LoggingConfigurationSetting, ILogger>(setting, s => s.LogType)); }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { this.setting = (RedisCacheSetting)setting; options = new ConfigurationOptions { DefaultDatabase = this.setting.DefaultDb, Password = this.setting.Password, AllowAdmin = true }; var endPoints = new EndPointCollection(); foreach (var h in this.setting.Hosts) { if (h.Port == 0) { options.EndPoints.Add(h.Server); } else { options.EndPoints.Add(h.Server, h.Port); } } }
/// <summary> /// 根据应用程序配置,创建订阅管理器。 /// </summary> /// <param name="configName">应用程序配置项的名称。</param> /// <returns><paramref name="configName"/>缺省时,如果应用程序未配置,则为 <see cref="DefaultSubscribeManager"/>,否则为配置项对应的 <see cref="ISubscribeManager"/> 实例。</returns> public static ISubscribeManager CreateManager(string configName = null) { ISubscribeManager manager; IConfigurationSettingItem setting = null; var section = ConfigurationUnity.GetSection <SubscribeConfigurationSection>(); if (section != null && section.Factory != null) { manager = ConfigurationUnity.Cached <ISubscribeManager>($"Subscribe_{configName}", () => section.Factory.CreateInstance(configName) as ISubscribeManager); if (manager != null) { return(manager); } } if (string.IsNullOrEmpty(configName)) { if (section == null || (setting = section.GetDefault()) == null) { return(DefaultSubscribeManager.Instance); } } else if (section != null) { setting = section.GetSetting(configName); } if (setting == null) { return(null); } return(ConfigurationUnity.Cached <ISubscribeManager>($"Subscribe_{configName}", () => ConfigurationUnity.CreateInstance <SubscribeConfigurationSetting, ISubscribeManager>(setting, s => s.SubscriberType))); }
/// <summary> /// 根据应用程序配置,创建缓存管理器。 /// </summary> /// <param name="configName">应用程序配置项的名称。</param> /// <returns><paramref name="configName"/>缺省时,如果应用程序未配置,则为 <see cref="MemoryCacheManager"/>,否则为配置项对应的 <see cref="ICacheManager"/> 实例。</returns> public static ICacheManager CreateManager(string configName = null) { ICacheManager manager; IConfigurationSettingItem setting = null; var section = ConfigurationUnity.GetSection <CachingConfigurationSection>(); if (section != null && section.Factory != null) { manager = section.Factory.CreateInstance(configName) as ICacheManager; if (manager != null) { return(manager); } } if (string.IsNullOrEmpty(configName)) { if (section == null || (setting = section.GetDefault()) == null) { return(MemoryCacheManager.Instance); } } else if (section != null) { setting = section.GetSetting(configName); } if (setting == null) { return(null); } return(ConfigurationUnity.CreateInstance <CachingConfigurationSetting, ICacheManager>(setting, s => s.CacheType)); }
/// <summary> /// 根据应用程序配置,创建一个分布式锁。 /// </summary> /// <param name="configName">应用程序配置项的名称。</param> /// <returns><paramref name="configName"/>为配置项对应的 <see cref="IDistributedLocker"/> 实例。</returns> public static IDistributedLocker CreateLocker(string configName = null) { IDistributedLocker locker; IConfigurationSettingItem setting = null; var section = ConfigurationUnity.GetSection <LockerConfigurationSection>(); if (section != null && section.Factory != null) { locker = ConfigurationUnity.Cached <IDistributedLocker>($"Locker_{configName}", () => section.Factory.CreateInstance(configName) as IDistributedLocker); if (locker != null) { return(locker); } } if (string.IsNullOrEmpty(configName)) { if (section == null || (setting = section.GetDefault()) == null) { throw new NotSupportedException(); } } else if (section != null) { setting = section.GetSetting(configName); } if (setting == null) { return(null); } return(ConfigurationUnity.Cached <IDistributedLocker>($"Locker_{configName}", () => ConfigurationUnity.CreateInstance <LockerConfigurationSetting, IDistributedLocker>(setting, s => s.LockerType))); }
/// <summary> /// 根据提供的配置创建实例对象。 /// </summary> /// <typeparam name="TSetting"></typeparam> /// <typeparam name="TInstance"></typeparam> /// <param name="serviceProvider"></param> /// <param name="setting"></param> /// <param name="typeGetter"></param> /// <param name="initializer"></param> /// <returns></returns> public static TInstance CreateInstance<TSetting, TInstance>(IServiceProvider serviceProvider, IConfigurationSettingItem setting, Func<TSetting, Type> typeGetter, Action<TSetting, TInstance> initializer = null) where TSetting : class, IConfigurationSettingItem { var relSetting = setting as TSetting; IConfigurationSettingItem extendSetting = null; if (setting is ExtendConfigurationSetting wsetting) { relSetting = wsetting.Base as TSetting; extendSetting = wsetting.Extend; } Type type; if (relSetting == null || (type = typeGetter(relSetting)) == null) { return default; } var instance = serviceProvider != null ? (TInstance)type.New(serviceProvider) : type.New<TInstance>().TryUseContainer(); if (instance == null) { return default; } initializer?.Invoke(relSetting, instance); if (extendSetting != null) { instance.As<IConfigurationSettingHostService>(s => AttachSetting(s, extendSetting)); } return instance; }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { this.setting = (SubscribeConfigurationSetting)setting; var profile = DefaultProfile.GetProfile(this.setting.RegionId, this.setting.AccessId, this.setting.AccessSecret); client = new DefaultAcsClient(profile); }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { this.setting = (ComplexLoggingSetting)setting; foreach (var item in this.setting.Pairs) { logPairs.Add(new ComplexLoggerPair { Level = item.Level, Logger = item.LogType.New <ILogger>() }); } }
/// <summary> /// 根据应用程序配置,创建任务调度管理器。 /// </summary> /// <param name="serviceProvider">应用程序服务提供者实例。</param> /// <param name="configName">应用程序配置项的名称。</param> /// <returns><paramref name="configName"/>缺省时,如果应用程序未配置,则为 <see cref="DefaultTaskScheduler"/>,否则为配置项对应的 <see cref="ITaskScheduler"/> 实例。</returns> private static ITaskScheduler CreateScheduler(IServiceProvider serviceProvider, string configName = null) { ITaskScheduler manager; IConfigurationSettingItem setting = null; var section = ConfigurationUnity.GetSection <TaskScheduleConfigurationSection>(); if (section != null && section.Factory != null) { manager = ConfigurationUnity.Cached <ITaskScheduler>($"TaskScheduler_{configName ?? "default"}", serviceProvider, () => section.Factory.CreateInstance(serviceProvider, configName) as ITaskScheduler); if (manager != null) { return(manager); } } if (string.IsNullOrEmpty(configName)) { if (section == null || (setting = section.GetDefault()) == null) { return(serviceProvider != null ? new DefaultTaskScheduler(serviceProvider) : DefaultTaskScheduler.Instance); } } else if (section != null) { setting = section.GetSetting(configName); } if (setting == null) { return(null); } return(ConfigurationUnity.Cached <ITaskScheduler>($"TaskScheduler_{configName ?? "default"}", serviceProvider, () => ConfigurationUnity.CreateInstance <TaskScheduleConfigurationSetting, ITaskScheduler>(serviceProvider, setting, s => s.SchedulerType, (s, t) => InitializeDefinitions(s, t)))); }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { this.setting = (RedisCacheSetting)setting; if (this.setting.SerializerType != null) { serializer = this.setting.SerializerType.New <ObjectSerializer>(); } else { serializer = new ObjectSerializer(); } var hosts = new List <string>(); var readHosts = new List <string>(); foreach (var h in this.setting.Hosts) { var address = h.EndPoint; if (!string.IsNullOrEmpty(h.Password)) { address = h.Password + "@" + address; } hosts.Add(address); if (h.ReadOnly) { readHosts.Add(address); } } manager = new PooledRedisClientManager(hosts.ToArray(), readHosts.ToArray(), new RedisClientManagerConfig { MaxReadPoolSize = this.setting.MaxReadPoolSize, MaxWritePoolSize = this.setting.MaxWritePoolSize, DefaultDb = this.setting.DefaultDb }); }
/// <summary> /// 根据应用程序配置,创建缓存管理器。 /// </summary> /// <param name="serviceProvider">应用程序服务提供者实例。</param> /// <param name="configName">应用程序配置项的名称。</param> /// <returns><paramref name="configName"/>缺省时,如果应用程序未配置,则为 <see cref="MemoryCacheManager"/>,否则为配置项对应的 <see cref="ICacheManager"/> 实例。</returns> private static ICacheManager CreateManager(IServiceProvider serviceProvider, string configName = null) { ICacheManager manager; IConfigurationSettingItem setting = null; var section = ConfigurationUnity.GetSection <CachingConfigurationSection>(); if (section != null && section.Factory != null) { manager = ConfigurationUnity.Cached <ICacheManager>($"CacheManager_{configName}", serviceProvider, () => section.Factory.CreateInstance(serviceProvider, configName) as ICacheManager); if (manager != null) { return(manager); } } if (string.IsNullOrEmpty(configName)) { if (section == null || (setting = section.GetDefault()) == null) { return(serviceProvider != null ? new MemoryCacheManager(serviceProvider) : MemoryCacheManager.Instance); } } else if (section != null) { setting = section.GetSetting(configName); } if (setting == null) { return(null); } return(ConfigurationUnity.Cached <ICacheManager>($"CacheManager_{configName}", serviceProvider, () => ConfigurationUnity.CreateInstance <CachingConfigurationSetting, ICacheManager>(serviceProvider, setting, s => s.CacheType))); }
/// <summary> /// 根据应用程序配置,创建文本序列化器。 /// </summary> /// <param name="serviceProvider">应用程序服务提供者实例。</param> /// <param name="configName">应用程序配置项的名称。</param> /// <returns></returns> private static ISerializer CreateSerializer(IServiceProvider serviceProvider, string configName = null) { ISerializer serializer; IConfigurationSettingItem setting = null; var section = ConfigurationUnity.GetSection <SerializerConfigurationSection>(); if (section != null && section.Factory != null) { serializer = ConfigurationUnity.Cached <ISerializer>($"Serializer_{configName}", serviceProvider, () => section.Factory.CreateInstance(serviceProvider, configName) as ISerializer); if (serializer != null) { return(serializer); } } if (string.IsNullOrEmpty(configName)) { if (section == null || (setting = section.GetDefault()) == null) { return(null); } } else if (section != null) { setting = section.GetSetting(configName); } if (setting == null) { return(null); } return(ConfigurationUnity.Cached <ISerializer>($"Serializer_{configName}", serviceProvider, () => ConfigurationUnity.CreateInstance <SerializerConfigurationSetting, ISerializer>(serviceProvider, setting, s => s.SerializerType))); }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { this.Setting = (RedisConfigurationSetting)setting; #if NETSTANDARD var connectionStrs = new List <string>(); if (!string.IsNullOrEmpty(this.Setting.ConnectionString)) { connectionStrs.Add(this.Setting.ConnectionString); } else { foreach (var host in this.Setting.Hosts) { var connStr = new StringBuilder($"{host.Server}"); #region connection build if (host.Port != 0) { connStr.Append($":{host.Port}"); } if (!string.IsNullOrEmpty(this.Setting.Password)) { connStr.Append($",password={this.Setting.Password}"); } if (this.Setting.DefaultDb != 0) { connStr.Append($",defaultDatabase={this.Setting.DefaultDb}"); } connStr.Append(",allowAdmin=true"); #endregion connectionStrs.Add(connStr.ToString()); } } connectionLazy = new Lazy <CSRedisClient>(() => new CSRedisClient(null, connectionStrs.ToArray())); #else if (!string.IsNullOrEmpty(this.Setting.ConnectionString)) { Options = ConfigurationOptions.Parse(this.Setting.ConnectionString); } else { Options = new ConfigurationOptions { DefaultDatabase = this.Setting.DefaultDb, Password = this.Setting.Password, AllowAdmin = true, Proxy = this.Setting.Twemproxy ? Proxy.Twemproxy : Proxy.None, AbortOnConnectFail = false }; if (this.Setting.ConnectTimeout != null) { Options.ConnectTimeout = (int)this.Setting.ConnectTimeout; } foreach (var host in this.Setting.Hosts) { if (host.Port == 0) { Options.EndPoints.Add(host.Server); } else { Options.EndPoints.Add(host.Server, host.Port); } } } connectionLazy = new Lazy <ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(Options)); #endif }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { this.setting = (RabbitConfigurationSetting)setting; }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { Setting = (RabbitConfigurationSetting)setting; StartPersistentTimer(); }
/// <summary> /// 为具有 <see cref="IConfigurationSettingHostService"/> 接口的对象附加相应的配置对象。 /// </summary> /// <param name="hostService"></param> /// <param name="setting"></param> public static void AttachSetting(IConfigurationSettingHostService hostService, IConfigurationSettingItem setting) { if (hostService != null) { hostService.Attach(setting); } }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { if (Setting != null) { return; } Setting = (RedisConfigurationSetting)setting; if (!string.IsNullOrEmpty(Setting.ConnectionString)) { _connectionStrs.Add(Setting.ConnectionString); } else { foreach (var host in Setting.Hosts) { var connStr = new StringBuilder($"{host.Server}"); #region connection build if (host.Port != 0) { connStr.Append($":{host.Port}"); } if (!string.IsNullOrEmpty(Setting.Password)) { connStr.Append($",password={Setting.Password}"); } if (Setting.DefaultDb != 0 && string.IsNullOrEmpty(Setting.DbRange)) { connStr.Append($",defaultDatabase={Setting.DefaultDb}"); } if (Setting.Ssl) { connStr.Append($",ssl=true"); } if (Setting.WriteBuffer != null) { connStr.Append($",writeBuffer={Setting.WriteBuffer}"); } if (Setting.PoolSize != null) { connStr.Append($",poolsize={Setting.PoolSize}"); } if (Setting.ConnectTimeout.Milliseconds != 5000) { connStr.Append($",connectTimeout={Setting.ConnectTimeout.Milliseconds}"); } if (Setting.SyncTimeout.Milliseconds != 10000) { connStr.Append($",syncTimeout={Setting.SyncTimeout.Milliseconds}"); } connStr.Append(",allowAdmin=true"); #endregion _connectionStrs.Add(connStr.ToString()); } } if (string.IsNullOrEmpty(Setting.DbRange)) { _clients.GetOrAdd(0, () => new CSRedisClient(null, _connectionStrs.ToArray())); } else { ParseDbRange(Setting.DbRange); if (!string.IsNullOrEmpty(Setting.KeyRule)) { ParseKeyCapture(Setting.KeyRule); } } OnInitialize(); }
void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting) { this.setting = (MyLoggingSetting)setting; }