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); }
internal FeatureDisableToken(FeatureService service, string featureName, IFeatureController controller) { this.service = service; this.featureName = featureName; this.controller = controller; }