/// <summary> /// Gets the feature set. /// </summary> /// <param name="user">The user.</param> /// <param name="featureSetType">Type of the feature set.</param> /// <returns>The <see cref="FeatureSet"/></returns> public static FeatureSet GetFeatureSet(User user, FeatureSetType featureSetType) { var features = new List <IFeature>(); foreach (Type type in FeatureSets[featureSetType]) { if (!user.FeatureCache.ContainsKey(type)) { IFeature feature = (IFeature)Activator.CreateInstance(type); user.FeatureCache[type] = feature; feature.Configure(); var configurable = feature as IConfigurableFeature; if (configurable != null) { configurable.Configure(user); } } features.Add(user.FeatureCache[type]); } return(new FeatureSet { Name = featureSetType.ToString(), Features = features.ToList() }); }