public static IServiceCollection AddCaching(this IServiceCollection services)
        {
            var section = ConfigurationUnity.GetSection <CachingConfigurationSection>();

            if (section == null)
            {
                return(services);
            }

            var setting = section.GetDefault();

            if (setting == null)
            {
                services.AddSingleton(typeof(ICacheManager), sp => CreateManager(sp));
            }
            else
            {
                if (setting is ExtendConfigurationSetting extend)
                {
                    setting = extend.Base;
                }

                services.AddSingleton(typeof(ICacheManager), sp => CreateManager(sp, ((CachingConfigurationSetting)setting).Name));
            }

            services.AddSingleton <IMemoryCacheManager>(sp => new MemoryCacheManager(sp))
            .AddSingleton(sp => sp.GetService(typeof(ICacheManager)) as IDistributedCacheManager);

            return(services);
        }
Exemple #2
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)));
        }
Exemple #3
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));
        }
        /// <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));
        }
Exemple #5
0
        /// <summary>
        /// 初始化提供者。
        /// </summary>
        private static void InitializeProviders()
        {
            lock (providerWappers)
            {
                //内置的提供者
#if !NETSTANDARD
                AddProvider("OleDb", OleDbProvider.Instance);
                AddProvider("Odbc", OdbcProvider.Instance);
#endif
                AddProvider("SqlServer", MsSqlProvider.Instance);
                AddProvider("MsSql", MsSqlProvider.Instance);
                AddProvider("Oracle", OracleProvider.Instance);
                AddProvider("SQLite", SQLiteProvider.Instance);
                AddProvider("MySql", MySqlProvider.Instance);
                AddProvider("PostgreSql", PostgreSqlProvider.Instance);
                AddProvider("Firebird", FirebirdProvider.Instance);
                AddProvider("DB2", DB2Provider.Instance);

                //取配置,注册自定义提供者
                var section = ConfigurationUnity.GetSection <ProviderConfigurationSection>();
                if (section != null)
                {
                    RegisterCustomProviders(section);
                }
            }
        }
Exemple #6
0
        /// <summary>
        /// 尝试通过表达式获取执行后的结果缓存。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="expression"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        internal static T TryGet <T>(Expression expression, Func <T> func)
        {
            var section = ConfigurationUnity.GetSection <TranslatorConfigurationSection>();
            var option  = section == null ? TranslateOptions.Default : section.Options;
            var result  = CacheableChecker.Check(expression);

            //没有开启数据缓存
            if ((result.Enabled == null && !option.CacheExecution) || result.Enabled == false)
            {
                return(func());
            }

            var cacheMgr = CacheManagerFactory.CreateManager();

            if (cacheMgr == null)
            {
                return(func());
            }

            var cacheKey = ExpressionKeyGenerator.GetKey(expression, "Exec");

            cacheKey = NativeCacheKeyContext.GetKey(cacheKey);

            Reference(cacheKey, expression);

            var segment = SegmentFinder.Find(expression);
            var pager   = segment as DataPager;

            var cacheFunc = new Func <CacheItem <T> >(() =>
            {
                var data = EnumerateData(func());

                var isEnumerable = typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(IEnumerable <>);
                if (isEnumerable)
                {
                    var elementType = typeof(T).GetEnumerableElementType();
                    var method      = typeof(Enumerable).GetMethod(nameof(Enumerable.ToList)).MakeGenericMethod(elementType);
                    data            = (T)method.Invoke(null, new object[] { data });
                }

                var total = 0;
                if (pager != null)
                {
                    total = pager.RecordCount;
                }

                return(new CacheItem <T> {
                    Data = data, Total = total
                });
            });

            var cacheItem = cacheMgr.TryGet(cacheKey, cacheFunc, () => new RelativeTime(result.Expired ?? TimeSpan.FromSeconds(option.CacheExecutionTimes)));

            if (pager != null)
            {
                pager.RecordCount = cacheItem.Total;
            }

            return(cacheItem.Data);
        }
Exemple #7
0
 /// <summary>
 /// 重新加载配置节 fireasy/dataProviders。
 /// </summary>
 public static void Reload()
 {
     lock (m_locker)
     {
         _configuration = ConfigurationUnity.Load <ProviderSetting>("fireasy/dataProviders") as ProviderConfiguration;
     }
 }
        internal static IServiceCollection AddSubscriber(this IServiceCollection services)
        {
            var section = ConfigurationUnity.GetSection <SubscribeConfigurationSection>();

            if (section == null)
            {
                return(services);
            }

            var setting = section.GetDefault();

            if (setting == null)
            {
                services.AddSingleton(typeof(ISubscribeManager), DefaultSubscribeManager.Instance);
            }
            else
            {
                if (setting is ExtendConfigurationSetting extend)
                {
                    setting = extend.Base;
                }

                services.AddSingleton(typeof(ISubscribeManager), ((SubscribeConfigurationSetting)setting).SubscriberType);
            }

            return(services);
        }
Exemple #9
0
        public Expression GetExecutionPlan(Expression expression, TranslateOptions option = null)
        {
            try
            {
                LambdaExpression lambda = expression as LambdaExpression;
                if (lambda != null)
                {
                    expression = lambda.Body;
                }

                var section = ConfigurationUnity.GetSection <TranslatorConfigurationSection>();
                var package = GetTranslateProvider();
                var options = option ?? (section == null ? package.CreateOptions() : section.Options);

                using (var scope = new TranslateScope(context, package))
                {
                    var translation = package.Translate(expression, options);

                    var parameters = lambda != null ? lambda.Parameters : null;
                    var provider   = Find(expression, parameters, typeof(QueryProvider));
                    if (provider == null)
                    {
                        var rootQueryable = Find(expression, parameters, typeof(IQueryable));
                        provider = Expression.Property(rootQueryable, typeof(IQueryable).GetProperty("Provider"));
                    }

                    return(package.BuildExecutionPlan(translation, provider, options));
                }
            }
            catch (Exception ex)
            {
                throw new TranslateException(expression, ex);
            }
        }
        internal static IServiceCollection AddLogger(this IServiceCollection services)
        {
            var section = ConfigurationUnity.GetSection <LoggingConfigurationSection>();

            if (section == null)
            {
                return(services);
            }

            var setting = section.GetDefault();

            if (setting == null)
            {
                services.AddTransient(typeof(ILogger), sp => CreateLogger(sp));
            }
            else
            {
                if (setting is ExtendConfigurationSetting extend)
                {
                    setting = extend.Base;
                }

                services.AddTransient(typeof(ILogger), sp => CreateLogger(sp, ((LoggingConfigurationSetting)setting).Name));
            }

            return(services);
        }
 internal static void Bind(IServiceCollection services, IConfiguration configuration)
 {
     ConfigurationUnity.Bind <GlobalConfigurationSection>(configuration);
     ConfigurationUnity.Bind <ProviderConfigurationSection>(configuration);
     ConfigurationUnity.Bind <ConverterConfigurationSection>(configuration);
     ConfigurationUnity.Bind <InstanceConfigurationSection>(configuration);
 }
Exemple #12
0
        /// <summary>
        /// 使用配置实例名创建一个 <see cref="Database"/> 实例对象。
        /// </summary>
        /// <param name="instanceName">配置实例名称。</param>
        /// <param name="serviceProvider">检索服务提供者。</param>
        /// <returns>一个 <see cref="Database"/> 实例对象。</returns>
        public static IDatabase CreateDatabase(string instanceName = null)
        {
            var section = ConfigurationUnity.GetSection <InstanceConfigurationSection>();

            Guard.NullReference(section, SR.GetString(SRKind.NonInstanceConfigurationSection));

            var setting = string.IsNullOrEmpty(instanceName) ? section.Default : section.Settings[instanceName];

            Guard.NullReference(setting, SR.GetString(SRKind.InstanceConfigurationInvalid, instanceName));
            IDatabase database;

            if (setting.DatabaseType != null)
            {
                if (setting.Clusters.Count > 0)
                {
                    database = setting.DatabaseType.New <IDatabase>(GetDistributedConnections(setting), null);
                }
                else
                {
                    database = setting.DatabaseType.New <IDatabase>((ConnectionString)setting.ConnectionString, null);
                }
            }
            else
            {
                database = CreateDatabase(setting);
            }

            if (DatabaseScope.Current != null)
            {
                DatabaseScope.Current.InstanceName = instanceName;
            }

            return(database.TryUseContainer());
        }
        /// <summary>
        /// 在 <see cref="IServiceCollection"/> 上注册 Fireasy 容器里的定义。
        /// </summary>
        /// <param name="services"></param>
        /// <param name="containerName">容器名称。</param>
        /// <returns></returns>
        public static IServiceCollection AddIoc(this IServiceCollection services, string containerName = null)
        {
            Guard.ArgumentNull(services, nameof(services));

            var section = ConfigurationUnity.GetSection <ContainerConfigurationSection>();

            if (section == null)
            {
                return(services);
            }

            var setting = string.IsNullOrEmpty(containerName) ? section.Default : section.Settings[containerName];

            if (setting == null)
            {
                return(services);
            }

            foreach (var reg in setting.Registrations)
            {
                if (reg.Assembly != null)
                {
                    Helpers.DiscoverAssembly(reg.Assembly, (svrType, implType, lifetime) => Register(services, svrType, implType, GetLifetime(lifetime)));
                }
                else
                {
                    Register(services, reg.ServiceType, reg.ImplementationType, GetLifetime(reg.Lifetime));
                }
            }

            return(services);
        }
Exemple #14
0
        /// <summary>
        /// 尝试获取指定表达式的缓存。
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="func">当缓存不存在时,创建缓存数据的函数。</param>
        /// <returns></returns>
        internal static Delegate TryGetDelegate(Expression expression, Func <LambdaExpression> func)
        {
            if (!CachaebleChecker.Check(expression))
            {
                return(func().Compile());
            }

            var section = ConfigurationUnity.GetSection <TranslatorConfigurationSection>();
            var option  = section == null ? TranslateOptions.Default : section.Options;

            if (!option.ParseCacheEnabled)
            {
                return(func().Compile());
            }

            var lazy = new Lazy <Delegate>(() =>
            {
                //将表达式内的 Segment 替换成参数
                var segParExp = Expression.Parameter(typeof(IDataSegment), "g");
                var lambdaExp = func() as LambdaExpression;
                var newExp    = SegmentReplacer.Repalce(lambdaExp.Body, segParExp);
                lambdaExp     = Expression.Lambda(newExp, lambdaExp.Parameters[0], segParExp);

                return(lambdaExp.Compile());
            });

            var cacheKey = ExpressionKeyGenerator.GetKey(expression, "Trans");

            return(MemoryCacheManager.Instance.TryGet(cacheKey, () => lazy.Value, () => new RelativeTime(TimeSpan.FromSeconds(option.ParseCacheExpired))));
        }
Exemple #15
0
        /// <summary>
        /// 获取表达式的执行计划。
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public Expression GetExecutionPlan(Expression expression)
        {
            try
            {
                if (expression is LambdaExpression lambda)
                {
                    expression = lambda.Body;
                }

                var section = ConfigurationUnity.GetSection <TranslatorConfigurationSection>();
                var trans   = service.InitializeContext.Provider.GetTranslateProvider();
                var options = GetTranslateOptions();

                using (var scope = new TranslateScope(service, trans, options))
                {
                    var translation = trans.Translate(expression);
                    var translator  = trans.CreateTranslator();

                    return(ExecutionBuilder.Build(translation, e => translator.Translate(e)));
                }
            }
            catch (Exception ex)
            {
                throw new TranslateException(expression, ex);
            }
        }
Exemple #16
0
        internal static IServiceCollection AddLocker(this IServiceCollection services)
        {
            var section = ConfigurationUnity.GetSection <LockerConfigurationSection>();

            if (section == null)
            {
                return(services);
            }

            var setting = section.GetDefault();

            if (setting == null)
            {
                return(services);
            }
            else
            {
                if (setting is ExtendConfigurationSetting extend)
                {
                    setting = extend.Base;
                }

                services.AddSingleton(typeof(IDistributedLocker), ((LockerConfigurationSetting)setting).LockerType);
            }

            return(services);
        }
Exemple #17
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)));
        }
Exemple #18
0
        /// <summary>
        /// 尝试获取指定表达式的缓存。
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="func">当缓存不存在时,创建缓存数据的函数。</param>
        /// <returns></returns>
        internal static Delegate TryGetDelegate(Expression expression, Func <LambdaExpression> func)
        {
            var section = ConfigurationUnity.GetSection <TranslatorConfigurationSection>();
            var option  = section == null ? TranslateOptions.Default : section.Options;

            var result = CacheableChecker.Check(expression);

            if (!result.Required || (result.Enabled == null && !option.CacheParsing) || result.Enabled == false)
            {
                return(func().Compile());
            }

            var cacheKey = ExpressionKeyGenerator.GetKey(expression, "Trans");

            cacheKey = NativeCacheKeyContext.GetKey(cacheKey);

            return(MemoryCacheManager.Instance.TryGet(cacheKey, () =>
            {
                var lambdaExp = func() as LambdaExpression;
                var segment = SegmentFinder.Find(expression);
                if (segment != null)
                {
                    //将表达式内的 Segment 替换成参数
                    var segParExp = Expression.Parameter(typeof(IDataSegment), "g");
                    var newExp = SegmentReplacer.Repalce(lambdaExp.Body, segParExp);
                    var parameters = new List <ParameterExpression>(lambdaExp.Parameters);
                    parameters.Insert(1, segParExp);
                    lambdaExp = Expression.Lambda(newExp, parameters.ToArray());
                }

                return lambdaExp.Compile();
            },
                                                      () => new RelativeTime(result.Expired ?? TimeSpan.FromSeconds(option.CacheParsingTimes))));
        }
Exemple #19
0
        /// <summary>
        /// 判断指定的类型是否支持转换。
        /// </summary>
        /// <param name="conversionType"></param>
        /// <returns></returns>
        public static bool CanConvert(Type conversionType)
        {
            //从配置里找 IValueConverter 对象
            var section = ConfigurationUnity.GetSection <ConverterConfigurationSection>();

            if (section != null)
            {
                var setting = section.Settings.FirstOrDefault(s => s.Value.SourceType == conversionType).Value;
                if (setting != null)
                {
                    return(true);
                }
            }

            if (conversionType.IsArray ||
                conversionType == typeof(Color) ||
                conversionType == typeof(Point) ||
                conversionType == typeof(Rectangle) ||
                conversionType == typeof(Size)
#if !NETSTANDARD
                || conversionType == typeof(Image) ||
                conversionType == typeof(Bitmap) ||
                conversionType == typeof(Font)
#endif
                || typeof(Exception).IsAssignableFrom(conversionType))
            {
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 获取表达式的执行计划。
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="option"></param>
        /// <returns></returns>
        public Expression GetExecutionPlan(Expression expression, TranslateOptions option = null)
        {
            try
            {
                LambdaExpression lambda = expression as LambdaExpression;
                if (lambda != null)
                {
                    expression = lambda.Body;
                }

                var section = ConfigurationUnity.GetSection <TranslatorConfigurationSection>();
                var package = GetTranslateProvider();
                var options = option ?? (section != null ? section.Options : TranslateOptions.Default);

                using (var scope = new TranslateScope(context, package))
                {
                    var translation = package.Translate(expression, options);
                    return(package.BuildExecutionPlan(translation, options));
                }
            }
            catch (Exception ex)
            {
                throw new TranslateException(expression, ex);
            }
        }
Exemple #21
0
        private static void ConfigureContainer(string name, Container container)
        {
            var section = ConfigurationUnity.GetSection <ContainerConfigurationSection>();

            ContainerConfigurationSetting setting;

            if (section == null)
            {
                return;
            }

            if (name == DEFAULT && section.Default != null)
            {
                setting = section.Default;
            }
            else if ((setting = section.Settings[name]) == null)
            {
                return;
            }

            foreach (var reg in setting.Registrations)
            {
                if (reg.ServiceType != null && reg.ComponentType != null)
                {
                    container.Register(reg.ServiceType, reg.ComponentType, reg.Singleton ? Lifetime.Singleton : Lifetime.Instance);
                }
            }
        }
        public static IServiceCollection AddTaskScheduler(this IServiceCollection services)
        {
            var section = ConfigurationUnity.GetSection <TaskScheduleConfigurationSection>();

            if (section == null)
            {
                return(services);
            }

            var setting = section.GetDefault();

            if (setting == null)
            {
                services.AddSingleton(typeof(ITaskScheduler), sp => CreateScheduler(sp));
            }
            else
            {
                if (setting is ExtendConfigurationSetting extend)
                {
                    setting = extend.Base;
                }

                var tsset = (TaskScheduleConfigurationSetting)setting;
                services.AddSingleton(typeof(ITaskScheduler), sp => CreateScheduler(sp, tsset.Name));
                services.TryAddEnumerable(
                    ServiceDescriptor.Singleton <IHostedService, ITaskScheduler>(sp => sp.GetService <ITaskScheduler>()));
            }

            return(services);
        }
        public static IServiceCollection AddSerializer(this IServiceCollection services)
        {
            var section = ConfigurationUnity.GetSection <SerializerConfigurationSection>();

            if (section == null)
            {
                return(services);
            }

            var setting = section.GetDefault();

            if (setting == null)
            {
                return(services);
            }
            else
            {
                if (setting is ExtendConfigurationSetting extend)
                {
                    setting = extend.Base;
                }

                services.AddSingleton(typeof(ISerializer), sp => CreateSerializer(sp, ((SerializerConfigurationSetting)setting).Name));
            }

            return(services);
        }
Exemple #24
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));
        }
Exemple #25
0
        internal static IServiceCollection AddCaching(this IServiceCollection services)
        {
            var section = ConfigurationUnity.GetSection <CachingConfigurationSection>();

            if (section == null)
            {
                return(services);
            }

            var setting = section.GetDefault();

            if (setting == null)
            {
                services.AddSingleton(typeof(ICacheManager), MemoryCacheManager.Instance);
            }
            else
            {
                if (setting is ExtendConfigurationSetting extend)
                {
                    setting = extend.Base;
                }

                services.AddSingleton(typeof(ICacheManager), ((CachingConfigurationSetting)setting).CacheType);
            }

            return(services);
        }
Exemple #26
0
        private static void ConfigureContainer(string name, Container container)
        {
            var section = ConfigurationUnity.GetSection <ContainerConfigurationSection>();

            IConfigurationSettingItem setting;

            if (section == null)
            {
                return;
            }

            if (name == DEFAULT && section.Default != null)
            {
                setting = section.Default;
            }
            else if ((setting = section.Settings[name]) == null)
            {
                return;
            }

            foreach (var reg in ((ContainerConfigurationSetting)setting).Registrations)
            {
                if (reg.Assembly != null)
                {
                    container.RegisterAssembly(reg.Assembly, reg.Singleton ? Lifetime.Singleton : Lifetime.Transient);
                }
                else if (reg.ServiceType != null && reg.ImplementationType != null)
                {
                    container.Register(reg.ServiceType, reg.ImplementationType, reg.Singleton ? Lifetime.Singleton : Lifetime.Transient);
                }
            }
        }
        /// <summary>
        /// 尝试从配置文件中配置 <see cref="EntityContextOptions"/> 实例。
        /// </summary>
        /// <param name="options"></param>
        protected virtual void TryPaserInstanceSetting(EntityContextOptions options)
        {
            if (options.Provider == null && options.ConnectionString == null)
            {
                var section = ConfigurationUnity.GetSection <InstanceConfigurationSection>();
                if (section != null)
                {
                    IInstanceConfigurationSetting setting;

                    if (!string.IsNullOrEmpty(options.ConfigName))
                    {
                        setting = section.Settings[options.ConfigName];
                    }
                    else
                    {
                        setting = section.Default;
                    }

                    if (setting != null)
                    {
                        options.Provider         = ProviderHelper.GetDefinedProviderInstance(setting);
                        options.ConnectionString = setting.ConnectionString;
                    }
                }
            }
        }
Exemple #28
0
        /// <summary>
        /// 根据对象类型创建相应的转换器。
        /// </summary>
        /// <param name="conversionType">要转换的数据类型。</param>
        /// <returns>返回一个 <see cref="IValueConverter"/> 实例,如果未找到对应的转换器,则返回 null。</returns>
        public static IValueConverter GetConverter(Type conversionType)
        {
            //从配置里找 IValueConverter 对象
            var section = ConfigurationUnity.GetSection <ConverterConfigurationSection>();

            if (section != null)
            {
                var setting = section.Settings.FirstOrDefault(s => s.Value.SourceType == conversionType).Value;
                if (setting != null)
                {
                    return(setting.ConverterType.New <IValueConverter>());
                }
            }

            if (conversionType.IsArray)
            {
                return(new ArrayConverter(conversionType.GetElementType()));
            }

            if (conversionType == typeof(Color))
            {
                return(new ColorConverter());
            }

            if (conversionType == typeof(Point))
            {
                return(new PointConverter());
            }

            if (conversionType == typeof(Rectangle))
            {
                return(new RectangleConverter());
            }

            if (conversionType == typeof(Size))
            {
                return(new SizeConverter());
            }

#if !NETSTANDARD
            if (conversionType == typeof(Image) ||
                conversionType == typeof(Bitmap))
            {
                return(new ImageConverter());
            }

            if (conversionType == typeof(Font))
            {
                return(new FontConverter());
            }
#endif

            if (typeof(Exception).IsAssignableFrom(conversionType))
            {
                return(new ExceptionConverter());
            }

            return(null);
        }
Exemple #29
0
        /// <summary>
        /// 判断是否被缓存。
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        internal static bool CanCache(Expression expression)
        {
            var section = ConfigurationUnity.GetSection <TranslatorConfigurationSection>();
            var option  = section == null ? TranslateOptions.Default : section.Options;
            var result  = CacheableChecker.Check(expression);

            return(typeof(IQueryable).IsAssignableFrom(expression.Type) && (result.Enabled == true || (result.Enabled == null && option.CacheExecution)));
        }
Exemple #30
0
        /// <summary>
        /// 初始化 <see cref="RedisLocker"/> 类的新实例。
        /// </summary>
        /// <param name="options"></param>
        public RedisLocker(IServiceProvider serviceProvider, IOptionsMonitor <RedisDistributedLockerOptions> options)
            : this(serviceProvider)
        {
            RedisConfigurationSetting setting = null;
            var optValue = options.CurrentValue;
            if (!optValue.IsConfigured())
            {
                var section      = ConfigurationUnity.GetSection <LockerConfigurationSection>();
                var matchSetting = section.Settings.FirstOrDefault(s => s.Value.LockerType == typeof(RedisLocker)).Value;
                if (matchSetting != null && section.GetSetting(matchSetting.Name) is ExtendConfigurationSetting extSetting)
                {
                    setting = (RedisConfigurationSetting)extSetting.Extend;
                }
                else
                {
                    throw new InvalidOperationException($"未发现与 {typeof(RedisLocker).FullName} 相匹配的配置。");
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(optValue.ConfigName))
                {
                    var section = ConfigurationUnity.GetSection <LockerConfigurationSection>();
                    if (section != null && section.GetSetting(optValue.ConfigName) is ExtendConfigurationSetting extSetting)
                    {
                        setting = (RedisConfigurationSetting)extSetting.Extend;
                    }
                    else
                    {
                        throw new InvalidOperationException($"无效的配置节: {optValue.ConfigName}。");
                    }
                }
                else
                {
                    setting = new RedisConfigurationSetting
                    {
                        Password         = optValue.Password,
                        ConnectionString = optValue.ConnectionString,
                        DefaultDb        = optValue.DefaultDb,
                        ConnectTimeout   = optValue.ConnectTimeout,
                        LockTimeout      = optValue.LockTimeout,
                        SyncTimeout      = optValue.SyncTimeout,
                        WriteBuffer      = optValue.WriteBuffer,
                        PoolSize         = optValue.PoolSize,
                        SerializerType   = optValue.SerializerType,
                        Ssl       = optValue.Ssl,
                        Twemproxy = optValue.Twemproxy
                    };

                    RedisHelper.ParseHosts(setting, optValue.Hosts);
                }
            }

            if (setting != null)
            {
                (this as IConfigurationSettingHostService).Attach(setting);
            }
        }