示例#1
0
文件: CKEngine.cs 项目: hover2008/PMS
        /// <summary>
        /// 使用Autofac注册依赖关系
        /// </summary>
        /// <param name="ckConfig">启动CKConfig参数</param>
        /// <param name="services">服务描述符的集合</param>
        /// <param name="typeFinder">Type finder</param>
        protected virtual IServiceProvider RegisterDependencies(CKConfig ckConfig, IServiceCollection services, ITypeFinder typeFinder)
        {
            var containerBuilder = new ContainerBuilder();

            //注册引擎
            containerBuilder.RegisterInstance(this).As <IEngine>().SingleInstance();

            //注册类型查找
            containerBuilder.RegisterInstance(typeFinder).As <ITypeFinder>().SingleInstance();

            //查找由其他程序集提供的依赖性注册
            var dependencyRegistrars = typeFinder.FindClassesOfType <IDependencyRegistrar>();

            //创建和排序依赖注册的实例
            var instances = dependencyRegistrars
                            .Select(dependencyRegistrar => (IDependencyRegistrar)Activator.CreateInstance(dependencyRegistrar))
                            .OrderBy(dependencyRegistrar => dependencyRegistrar.Order);

            //注册所有提供的依赖项
            foreach (var dependencyRegistrar in instances)
            {
                dependencyRegistrar.Register(containerBuilder, typeFinder, ckConfig);
            }

            //使用一组注册的服务描述符填充AutoFac容器生成器
            containerBuilder.Populate(services);

            //创建服务提供商
            _serviceProvider = new AutofacServiceProvider(containerBuilder.Build());
            return(_serviceProvider);
        }
示例#2
0
        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="perRequestCacheManager">Cache manager</param>
        /// <param name="connectionWrapper">ConnectionW wrapper</param>
        /// <param name="config">Config</param>
        public RedisCacheManager(ICacheManager perRequestCacheManager,
                                 IRedisConnectionWrapper connectionWrapper,
                                 CKConfig config)
        {
            if (string.IsNullOrEmpty(config.RedisCachingConnectionString))
            {
                throw new Exception("Redis connection string is empty");
            }

            this._perRequestCacheManager = perRequestCacheManager;

            // ConnectionMultiplexer.Connect should only be called once and shared between callers
            this._connectionWrapper = connectionWrapper;

            this._db = _connectionWrapper.GetDatabase();
        }
示例#3
0
 public DESEncrypt(CKConfig config)
 {
     this.config = config;
 }
示例#4
0
 public CKCacheModule(CKConfig config)
 {
     this.config = config;
 }
示例#5
0
        /// <summary>
        /// Register services and interfaces
        /// </summary>
        /// <param name="builder">Container builder</param>
        /// <param name="typeFinder">Type finder</param>
        /// <param name="config">Config</param>
        public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder, CKConfig config)
        {
            //file provider
            builder.RegisterType <CKFileProvider>().As <ICKFileProvider>().InstancePerLifetimeScope();
            //web helper
            builder.RegisterType <WebHelper>().As <IWebHelper>().InstancePerLifetimeScope();
            //verify code
            builder.RegisterType <VerifyCode>().As <IVerifyCode>().InstancePerLifetimeScope();
            //workcontext
            builder.RegisterType <WorkContext>().As <IWorkContext>().InstancePerLifetimeScope();
            //Encrypt
            builder.RegisterType <AESEncrypt>().SingleInstance();
            builder.RegisterType <DESEncrypt>().SingleInstance();
            //operation messages
            builder.RegisterType <Messages>().InstancePerLifetimeScope();
            builder.RegisterGeneric(typeof(MessagesData <>)).InstancePerLifetimeScope();
            //ck cache
            builder.RegisterModule(new CKCacheModule(config));
            //仓储和服务接口注册
            var Repository = Assembly.Load("JW.Data");
            var Services   = Assembly.Load("JW.Services");

            //根据名称约定(数据访问层的接口和实现均以Repository结尾),实现数据访问接口和数据访问实现的依赖
            builder.RegisterAssemblyTypes(Repository)
            .Where(t => t.Name.EndsWith("Repository"))
            .AsImplementedInterfaces().InstancePerLifetimeScope();

            //根据名称约定(服务层的接口和实现均以Service结尾),实现服务接口和服务实现的依赖
            builder.RegisterAssemblyTypes(Services)
            .Where(t => t.Name.EndsWith("Service"))
            .AsImplementedInterfaces().InstancePerLifetimeScope();
            //route publisher
            builder.RegisterType <RoutePublisher>().As <IRoutePublisher>().SingleInstance();
            //上传功能策略注册
            builder.RegisterType <UploadStrategy>().As <IUploadStrategy>().InstancePerLifetimeScope();
        }
示例#6
0
 /// <summary>
 /// Ctor
 /// </summary>
 /// <param name="config">Config</param>
 public RedisClientConnection(CKConfig config)
 {
     this._config           = config;
     this._connectionString = new Lazy <string>(GetConnectionString);
     this._redisLockFactory = CreateRedisLockFactory();
 }