Browse Source

Use providers instead of direct repository access for resetting features

pull/15524/head
Enis Necipoglu 4 years ago
parent
commit
1ab5f27d82
  1. 7
      modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs
  2. 31
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs
  3. 1
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureManager.cs

7
modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo/Abp/FeatureManagement/FeatureAppService.cs

@ -14,18 +14,15 @@ public class FeatureAppService : FeatureManagementAppServiceBase, IFeatureAppSer
{
protected FeatureManagementOptions Options { get; }
protected IFeatureManager FeatureManager { get; }
protected IFeatureValueRepository FeatureValueRepository { get; }
protected IFeatureDefinitionManager FeatureDefinitionManager { get; }
public FeatureAppService(IFeatureManager featureManager,
IFeatureDefinitionManager featureDefinitionManager,
IOptions<FeatureManagementOptions> options,
IFeatureValueRepository featureValueRepository)
IOptions<FeatureManagementOptions> options)
{
FeatureManager = featureManager;
FeatureDefinitionManager = featureDefinitionManager;
Options = options.Value;
FeatureValueRepository = featureValueRepository;
}
public virtual async Task<GetFeatureListResultDto> GetAsync([NotNull] string providerName, string providerKey)
@ -140,6 +137,6 @@ public class FeatureAppService : FeatureManagementAppServiceBase, IFeatureAppSer
public virtual async Task DeleteAsync([NotNull] string providerName, string providerKey)
{
await FeatureValueRepository.DeleteAsync(providerName, providerKey);
await FeatureManager.DeleteAsync(providerName, providerKey);
}
}

31
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Options;
@ -215,4 +216,34 @@ public class FeatureManager : IFeatureManager, ISingletonDependency
return featureNameValueWithGrantedProvider;
}
public async Task DeleteAsync(string providerName, string providerKey)
{
var featureNameValues = await GetAllAsync(providerName, providerKey);
var providers = Enumerable
.Reverse(Providers)
.SkipWhile(p => p.Name != providerName)
.ToList();
if (!providers.Any())
{
return;
}
providers = providers
.TakeWhile(p => p.Name == providerName)
.ToList(); //Getting list for case of there are more than one provider with same providerName
foreach (var featureNameValue in featureNameValues)
{
var feature = await FeatureDefinitionManager.GetAsync(featureNameValue.Name);
foreach (var provider in providers)
{
await provider.ClearAsync(feature, providerKey);
}
}
}
}

1
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/IFeatureManager.cs

@ -15,4 +15,5 @@ public interface IFeatureManager
Task<List<FeatureNameValueWithGrantedProvider>> GetAllWithProviderAsync([NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true);
Task SetAsync([NotNull] string name, [CanBeNull] string value, [NotNull] string providerName, [CanBeNull] string providerKey, bool forceToSet = false);
Task DeleteAsync(string providerName, string providerKey);
}

Loading…
Cancel
Save