Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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);
                    }
                }
            }
        }
Esempio n. 4
0
        /// <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));
        }
Esempio n. 5
0
        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);
                }
            }
        }
Esempio n. 6
0
        /// <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)));
        }
Esempio n. 7
0
        /// <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));
        }
Esempio n. 8
0
        /// <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)));
        }
Esempio n. 9
0
        /// <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;
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
 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))));
        }
Esempio n. 13
0
        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)));
        }
Esempio n. 15
0
        /// <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)));
        }
Esempio n. 16
0
        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
        }
Esempio n. 17
0
 void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting)
 {
     this.setting = (RabbitConfigurationSetting)setting;
 }
Esempio n. 18
0
 void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting)
 {
     Setting = (RabbitConfigurationSetting)setting;
     StartPersistentTimer();
 }
Esempio n. 19
0
 /// <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);
     }
 }
Esempio n. 20
0
        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;
 }