Beispiel #1
0
        public FeatureViewModel(FeatureBase feature, IFeatureController featureController)
        {
            _feature           = feature;
            _featureController = featureController;

            var canAddFeature = _featureController.SelectedFeatures
                                .Connect()
                                .QueryWhenChanged(CanAddFeature);

            canAddFeature = canAddFeature.StartWith(true);

            AddFeatureCommand = ReactiveCommand.Create <bool>(AddFeature, canAddFeature);

            _featureController.SelectedFeatures
            .Connect()
            .QueryWhenChanged(x => x.Contains(_feature))
            .ToPropertyEx(this, x => x.IsFeatureSelected);
        }
        public IFeatureDisableToken Disable(string featureName, IFeatureController controller)
        {
            if (string.IsNullOrEmpty(featureName))
            {
                throw new ArgumentNullException(nameof(featureName));
            }
            if (controller == null)
            {
                throw new ArgumentNullException(nameof(controller));
            }
            if (!Factory.RelatedDefinitions.ContainsKey(featureName))
            {
                throw new ArgumentOutOfRangeException(nameof(featureName), $"Feature {featureName} is not registered");
            }

            var token = new FeatureDisableToken(this, featureName, controller);

            var annulations = Annulations[featureName];

            if (annulations.Contains(controller))
            {
                return(token); // This controller already disables this feature
            }
            annulations.Add(controller);

            if (annulations.Count == 1) // Notify of update
            {
                Factory.GuardedOperations.RaiseEvent(this, StateUpdated, new FeatureUpdatedEventArgs(featureName));
            }

            Factory.Telemetry?.PostEvent(
                TelemetryEventType.Operation,
                TelemetryDisableEventName,
                TelemetryResult.Success,
                (TelemetryFeatureNameKey, featureName),
                (TelemetryControllerKey, controller.GetType().ToString()),
                (TelemetryGlobalScopeKey, Parent == null)
                );

            return(token);
        }
Beispiel #3
0
 internal FeatureDisableToken(FeatureService service, string featureName, IFeatureController controller)
 {
     this.service     = service;
     this.featureName = featureName;
     this.controller  = controller;
 }