public IFeatureManifest <TFeatureEnum> CreateFeatureManifest() { FeatureSetting <TFeatureEnum, TTenantEnum>[] featureSettings = _featureSettingsRepository.GetFeatureSettings(); var manifest = new FeatureManifest <TFeatureEnum>(); foreach (var setting in featureSettings) { FeatureVisibilityMode featureVisibilityMode = _httpContext.Request.Cookies[FeaturePreviewCookieName].IsNotNull() ? FeatureVisibilityMode.Preview : FeatureVisibilityMode.Normal; bool isAvailable = _featureSettingService .AllDependenciesAreSatisfiedForTheFeatureSetting(setting, new Tuple <FeatureVisibilityMode, TTenantEnum, DateTime>( featureVisibilityMode, _tenancyContext.CurrentTenant, _clock.Now)); manifest.Add(setting.Feature, new FeatureDescriptor <TFeatureEnum>(setting.Feature) { Dependencies = setting.Dependencies, IsAvailable = isAvailable, Settings = setting.Settings, }); } return(manifest); }
public bool AllDependenciesAreSatisfiedForTheFeatureSetting( FeatureSetting <TFeatureEnum, DefaultTenantEnum> f, EmptyArgs availabilityCheckArgs) { return(_featureSettingAvailabilityChecker.RecursivelyCheckAvailability(f, _featureSettingRepository .GetFeatureSettings(), availabilityCheckArgs)); }
/// <summary> /// Designed for use for features that the feature subsystem itself depends upon. Provides a way of retrieving feature setting information without the FeatureManifest being pre-instantiated. /// </summary> internal static string Setting <TFeatureEnum, TTenantEnum>(this TFeatureEnum feature, Enum settingName, IFeatureSettingRepository <TFeatureEnum, TTenantEnum> featureSettingRepository) where TFeatureEnum : struct where TTenantEnum : struct { try { FeatureSetting <TFeatureEnum, TTenantEnum>[] featureSettings = featureSettingRepository.GetFeatureSettings(); FeatureSetting <TFeatureEnum, TTenantEnum> featureSetting = featureSettings.First(s => s.Feature.Equals(feature)); //was == Ensure.That <FeatureConfigurationException <TFeatureEnum> >(featureSetting.IsRequiredByFeatureSubsystem, "Specified feature not marked as being required by the feature subsystem."); return(featureSetting.Settings[Enum.GetName(settingName.GetType(), settingName)]); } catch (Exception e) { throw new Exception(string.Format("Unable to find setting \"{0}\".", settingName), e); } }
public IFeatureManifest <TFeatureEnum> CreateFeatureManifest() { FeatureSetting <TFeatureEnum, TTenantEnum>[] featureSettings = _featureSettingRepository.GetFeatureSettings(); var manifest = new FeatureManifest <TFeatureEnum>(); foreach (var setting in featureSettings) { var isAvailable = _featureSettingService.AllDependenciesAreSatisfiedForTheFeatureSetting(setting, new EmptyArgs()); manifest.Add(setting.Feature, new FeatureDescriptor <TFeatureEnum>(setting.Feature) { Dependencies = setting.Dependencies, IsAvailable = isAvailable, Settings = setting.Settings, }); } return(manifest); }