/// <summary>
        /// Configure Redis
        /// </summary>
        /// <param name="configuration">Configuration</param>
        public static void Configure(IConfiguration configuration)
        {
            var redisConnection = configuration.GetConnectionString("RedisConnectionString");

            if (string.IsNullOrEmpty(redisConnection))
            {
                throw new ConfigurationErrorsException("Redis connection string not found in appsettings.json");
            }
            RedisConnectionMultiplexer.InitializeConnectionString(redisConnection);
        }
        public void CreateWithFailingProvider()
        {
            var context         = new Context(TestGlobal.Logger);
            var errorMessage    = "error";
            var failingProvider = CreateFailingProvider(errorMessage);
            Func <Task <IConnectionMultiplexer> > createFunc =
                () => RedisConnectionMultiplexer.CreateAsync(context, failingProvider, logSeverity: BuildXL.Cache.ContentStore.Interfaces.Logging.Severity.Unknown, usePreventThreadTheft: false);

            createFunc.Should().Throw <ArgumentException>().Where(e => e.Message.Contains(
                                                                      $"Failed to get connection string from provider {failingProvider.GetType().Name}. {errorMessage}."));
        }
        public void CreateWithFailingProvider()
        {
            var context         = new Context(TestGlobal.Logger);
            var errorMessage    = "error";
            var failingProvider = CreateFailingProvider(errorMessage);
            Func <Task <IConnectionMultiplexer> > createFunc =
                () => RedisConnectionMultiplexer.CreateAsync(context, failingProvider);

            createFunc.Should().Throw <ArgumentException>().Where(e => e.Message.Contains(
                                                                      $"Failed to get connection string from provider {failingProvider.GetType().Name}. {errorMessage}."));
        }
예제 #4
0
        public static void AddCustomDataProtection(this IServiceCollection services, IConfiguration configuration, string discriminator)
        {
            var connectionString = new AzureKeyVaultConnectionStringBuilder(configuration.GetConnectionString("AzureKeyVault"));

            services.AddDataProtection(options => options.ApplicationDiscriminator = discriminator)
            .PersistKeysToRedis(RedisConnectionMultiplexer.Connect(configuration.GetConnectionString("Redis")), "DataProtection-Keys")
            .ProtectKeysWithAzureKeyVault(
                $"https://{connectionString.Name}.vault.azure.net/keys/dataprotection/",
                connectionString.ClientId,
                connectionString.ClientSecret);
        }
        public static IServiceCollection AddCache(this IServiceCollection services, IConfiguration configuration)
        {
            var section = configuration.GetSection("Cache");
            var type    = section["Type"] ?? "redis";

            if (type.Equals("redis", StringComparison.CurrentCultureIgnoreCase))
            {
                var config = new RedisConfig
                {
                    ConnectionString = configuration["Cache:Redis:ConnectionString"],
                    ApplicationKey   = configuration["Cache:Redis:ApplicationKey"]
                };
                RedisConnectionMultiplexer.Init(config);

                services.AddSingleton(typeof(ICacheService), typeof(RedisCacheService));
            }
            else
            {
                throw new ArgumentNullException("不存在此缓存插件");
            }

            return(services);
        }