public async Task <IEnumerable <string> > GetEnabledFeatures()
 {
     return
         (await
          Get(EnabledFeaturesKey, () => _decoratedFeatureProvider.GetEnabledFeatures())
          .ConfigureAwait(false));
 }
예제 #2
0
        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);
        }
예제 #3
0
        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
            }));
        }