/// <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); }
/// <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(); }
public DESEncrypt(CKConfig config) { this.config = config; }
public CKCacheModule(CKConfig config) { this.config = config; }
/// <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(); }
/// <summary> /// Ctor /// </summary> /// <param name="config">Config</param> public RedisClientConnection(CKConfig config) { this._config = config; this._connectionString = new Lazy <string>(GetConnectionString); this._redisLockFactory = CreateRedisLockFactory(); }