Exemple #1
0
 public static SitecoreCachingConfigBuilder SetDefaultMemoryStoreSettings(
     this SitecoreCachingConfigBuilder configBuilder,
     Action <MemoryCacheStoreOptions> configureStore)
 {
     configBuilder.Services.Configure <MemoryCacheStoreOptions>(configureStore);
     return(configBuilder);
 }
Exemple #2
0
 public static SitecoreCachingConfigBuilder AddRedisStore(
     this SitecoreCachingConfigBuilder configBuilder,
     string storeName,
     string redisConfiguration,
     string redisInstanceName)
 {
     AddRedisStore(configBuilder, storeName, redisConfiguration, redisInstanceName, sp => sp.GetRequiredService <ICacheStoreSerializer>());
     return(configBuilder);
 }
Exemple #3
0
 public static SitecoreCachingConfigBuilder AddRedisStore <TSerializer>(
     this SitecoreCachingConfigBuilder configBuilder,
     string storeName,
     string redisConfiguration,
     string redisInstanceName)
     where TSerializer : class, ICacheStoreSerializer
 {
     AddRedisStore(configBuilder, storeName, redisConfiguration, redisInstanceName, sp => ActivatorUtilities.CreateInstance <TSerializer>(sp));
     return(configBuilder);
 }
Exemple #4
0
        public static SitecoreCachingConfigBuilder AddMemoryStore(
            this SitecoreCachingConfigBuilder configBuilder,
            string storeName,
            Action <MemoryCacheStoreOptions> configureStore = null)
        {
            if (configureStore != null)
            {
                configBuilder.Services.ConfigureMatching <MemoryCacheStoreOptions>(configureStore, storeName);
            }

            configBuilder.Services.AddSingleton <ICacheStore>(sp =>
            {
                return(ActivatorUtilities.CreateInstance <MemoryCacheStore>(sp, storeName));
            });

            return(configBuilder);
        }
        /// <summary>
        /// Adds the Sitecore caching system to the service collection. Only to be called once per application.
        /// This function will setup a cache memory provider that will be used by all caches (by default) unless they are configured to use other providers.
        /// </summary>
        public static ISitecoreServicesConfiguration Caching(this ISitecoreServicesConfiguration builder, Action <SitecoreCachingConfigBuilder> configure = null)
        {
            builder.Services.AddMatchingOptions();

            builder.Services.TryAdd(ServiceDescriptor.Singleton <ICacheManager, CacheManager>());
            builder.Services.TryAdd(ServiceDescriptor.Singleton(typeof(ICache <>), typeof(Cache <>)));
            builder.Services.TryAdd(ServiceDescriptor.Singleton <ICacheStoreManager, CacheStoreManager>());
            builder.Services.TryAdd(ServiceDescriptor.Singleton <ICacheFactory, CacheFactory>());
            builder.Services.TryAddSingleton <ICacheStoreSerializer, DefaultCacheStoreSerializer>();

            // Ensure default options are set if this is the first call in startup.
            builder.Services.TryAdd(ServiceDescriptor.Transient <IConfigureMatchingOptions <CacheOptions>, DefaultCacheOptionsSetup>());

            var configBuilder = new SitecoreCachingConfigBuilder(builder);

            configure?.Invoke(configBuilder);

            return(builder);
        }
Exemple #6
0
        private static void AddRedisStore <TSerializer>(
            SitecoreCachingConfigBuilder configBuilder,
            string storeName,
            string redisConfiguration,
            string redisInstanceName,
            Func <IServiceProvider, TSerializer> serializerFactory)
            where TSerializer : class, ICacheStoreSerializer
        {
            Condition.Requires(storeName, nameof(storeName)).IsNotNullOrEmpty();
            Condition.Requires(redisConfiguration, nameof(redisConfiguration)).IsNotNull();
            Condition.Requires(redisInstanceName, nameof(redisInstanceName)).IsNotNull();

            configBuilder.Services.ConfigureMatching <RedisCacheOptions>(options =>
            {
                options.Configuration = redisConfiguration;
                options.InstanceName  = redisInstanceName;
            }, storeName);

            configBuilder.Services.AddSingleton <ICacheStore>(sp =>
            {
                return(ActivatorUtilities.CreateInstance <RedisCacheStore>(sp, serializerFactory(sp), storeName));
            });
        }