예제 #1
0
        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);
        }
예제 #2
0
 public bool AllDependenciesAreSatisfiedForTheFeatureSetting(
     FeatureSetting <TFeatureEnum, DefaultTenantEnum> f,
     EmptyArgs availabilityCheckArgs)
 {
     return(_featureSettingAvailabilityChecker.RecursivelyCheckAvailability(f,
                                                                            _featureSettingRepository
                                                                            .GetFeatureSettings(),
                                                                            availabilityCheckArgs));
 }
예제 #3
0
        /// <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);
        }