public async Task <IEnumerable <string> > GetEnabledFeatures() { return (await Get(EnabledFeaturesKey, () => _decoratedFeatureProvider.GetEnabledFeatures()) .ConfigureAwait(false)); }
public async Task <IEnumerable <IFeature> > FilterEnabledFeatures(IEnumerable <IFeature> concreteTypes) { var featureWithType = concreteTypes.Select(x => new { feature = x, featMeta = (FeatureAttribute)x.GetType().GetCustomAttribute(typeof(FeatureAttribute)) ?? new NullFeature(), suppMeta = (SuppressTypeAttribute)x.GetType().GetCustomAttribute(typeof(SuppressTypeAttribute)) ?? new NullSuppressedType(), }).ToList(); var enabledFeatures = await _featureProvider.GetEnabledFeatures().ConfigureAwait(false); var activeFeatures = featureWithType .Where(x => enabledFeatures.Contains(x.featMeta.Name)) .ToList(); var suppressedTypes = activeFeatures .Select(x => x.suppMeta.Type) .Where(x => x != null) .ToList(); var starts = activeFeatures .Where(x => !suppressedTypes.Contains(x.feature.GetType())) .ToList(); var tt = new List <IFeature>(); starts.ForEach(start => { while (true) { if (start == null || _ruleFactory(start.suppMeta.RuleType).Evaluate()) { break; } start = activeFeatures.FirstOrDefault(x => x.feature.GetType() == start.suppMeta.Type); } if (start != null) { tt.Add(start.feature); } }); return(tt); }
public async Task <IEnumerable <FeatureItem> > GetFeaturesItems() { var enabledFeatures = await _featureProvider.GetEnabledFeatures().ConfigureAwait(false); return(_featureManager.FeatureDescriptors.Select(x => new FeatureItem { FeatureDescriptor = x, FeatureState = enabledFeatures.Contains(x.Name) ? FeatureState.Enabled : FeatureState.Disabled })); }