using System.Collections.Generic; using System.Linq; namespace Abp.Application.Features { /// /// Used to store s. /// public class FeatureDictionary : Dictionary { /// /// Adds all the child features of the current features, recursively. /// public void AddAllFeatures() { foreach (var feature in Values.ToList()) { AddFeatureRecursively(feature); } } private void AddFeatureRecursively(Feature feature) { //Prevent multiple additions of the same-named feature. if (TryGetValue(feature.Name, out var existingFeature)) { if (existingFeature != feature) { throw new AbpInitializationException("Duplicate feature name detected for " + feature.Name); } } else { this[feature.Name] = feature; } //Add child features (recursive call) foreach (var childFeature in feature.Children) { AddFeatureRecursively(childFeature); } } } }