private async Task SetCacheItemsAsync( string providerName, string providerKey, string currentName, FeatureValueCacheItem currentCacheItem) { var featureDefinitions = FeatureDefinitionManager.GetAll(); var featuresDictionary = (await FeatureValueRepository.GetListAsync(providerName, providerKey)) .ToDictionary(s => s.Name, s => s.Value); var cacheItems = new List <KeyValuePair <string, FeatureValueCacheItem> >(); foreach (var featureDefinition in featureDefinitions) { var featureValue = featuresDictionary.GetOrDefault(featureDefinition.Name); cacheItems.Add( new KeyValuePair <string, FeatureValueCacheItem>( CalculateCacheKey(featureDefinition.Name, providerName, providerKey), new FeatureValueCacheItem(featureValue) ) ); if (featureDefinition.Name == currentName) { currentCacheItem.Value = featureValue; } } await Cache.SetManyAsync(cacheItems, considerUow : true); }
public async Task Cache_Should_Invalidator_WhenFeatureChanged() { // Arrange cache feature. (await _featureManagementStore.GetOrNullAsync( TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ) ).ShouldNotBeNull(); var feature = await _featureValueRepository.FindAsync( TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ); // Act await _featureValueRepository.DeleteAsync(feature); // Assert (await _cache.GetAsync( FeatureValueCacheItem.CalculateCacheKey( TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ) ) ).ShouldBeNull(); }
protected virtual async Task <FeatureValueCacheItem> GetCacheItemAsync(string name, string providerName, string providerKey) { var cacheKey = CalculateCacheKey(name, providerName, providerKey); var cacheItem = await Cache.GetAsync(cacheKey, considerUow : true); if (cacheItem != null) { return(cacheItem); } cacheItem = new FeatureValueCacheItem(null); await SetCacheItemsAsync(providerName, providerKey, name, cacheItem); return(cacheItem); }
public async Task Cache_Should_Invalidator_WhenSettingChanged_Between_Tenant_And_Host() { var tenantId = Guid.NewGuid(); using (_currentTenant.Change(tenantId)) { // Arrange cache feature. (await _featureManagementStore.GetOrNullAsync( TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ) ).ShouldNotBeNull(); } using (_currentTenant.Change(null)) { await _featureManagementStore.SetAsync(TestFeatureDefinitionProvider.SocialLogins, false.ToString(), EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString()); } using (_currentTenant.Change(tenantId)) { // Arrange cache feature. (await _cache.GetAsync( FeatureValueCacheItem.CalculateCacheKey( TestFeatureDefinitionProvider.SocialLogins, EditionFeatureValueProvider.ProviderName, TestEditionIds.Regular.ToString() ) ) ).ShouldBeNull(); } }
protected virtual string CalculateCacheKey(string name, string providerName, string providerKey) { return(FeatureValueCacheItem.CalculateCacheKey(name, providerName, providerKey)); }