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 static bool IsAvailable <TFeatureEnum, TTenantEnum>( this FeatureSetting <TFeatureEnum, TTenantEnum> f, FeatureVisibilityMode m, TTenantEnum tenant, DateTime currentDtg) where TFeatureEnum : struct where TTenantEnum : struct { return((f.SupportedTenants.Contains((TTenantEnum)Enum.ToObject(typeof(TTenantEnum), 0)) || f.SupportedTenants.Contains(tenant)) && (f.FeatureState == FeatureState.Enabled || (f.FeatureState == FeatureState.Previewable && m == FeatureVisibilityMode.Preview)) && f.StartDtg <= currentDtg && f.EndDtg > currentDtg); }