Ein leichtes Framework zum Umschalten von Funktionen, um eine Trunk-basierte Entwicklung zu ermöglichen.
Switcheroo strebt nach Einfachheit, mit einer sauberen Syntax und einem minimalen Funktionsumfang, ohne Kompromisse bei der Erweiterbarkeit und Testbarkeit einzugehen.
Switcheroo kann über Nuget installiert werden.
> Install-Package Switcheroo
Switcheroo ist unter der MIT-Lizenz lizenziert.
Installation
Nuget-Pakete finden Sie hier.
Konfiguration hinzufügen
<Konfiguration> <configSections> <section name="features" type="Switcheroo.Configuration.FeatureToggleConfiguration, Switcheroo"/> </configSections> <Funktionen> <schaltet> <add name="Log.InColor" aktiviert="true"/> </toggles> </features> </configuration>
Initialisierung der Bibliothek
Features.Initialize(x => x.FromApplicationConfig());
Überprüfen des Funktionsstatus
if (Features.IsEnabled("Log.InColor")){// Feature implementieren}
Boolescher Wert (wahr/falsch)
Die Funktion schaltet basierend auf einem statischen Binärwert ein oder aus.
Features.Add(new BooleanToggle("Feature1", true));
<Funktionen> <schaltet> <add name="BooleanToggle.Enabled" aktiviert="true"/> <add name="BooleanToggle.Disabled" aktiviert="false"/> </toggles> </features>
Datumsbereich (wahr/falsch, innerhalb des Datumsbereichs)
Das Umschalten der Datumsbereichsfunktion wird sowohl anhand des binär aktivierten Werts als auch anhand des aktuellen Datums ausgewertet.
Features.Add(new DateRangeToggle("Feature2", true, DateTime.Now.AddDays(5), null));
<Funktionen> <schaltet> <add name="Date.Enabled.InRange" aktiviert="true" von="1. Januar 2010" bis="31. Dezember 2050"/> <add name="Date.Enabled.Expired" aktiviert="true" bis="31. Dezember 2010"/> <add name="Date.Enabled.Future" aktiviert="true" from="1. Januar 2050"/> <add name="Date.Disabled" aktiviert="false"/> </schaltet> </features>
Von- und Bis- Daten können jedes gültige Datumsformat sein, das von DateTime.Parse analysiert werden kann.
Etablierte Funktionen
Wenn Sie einen Feature-Toggle als etabliert markieren, löst der Feature-Toggle eine FeatureEstablishedException -Ausnahme aus, um sicherzustellen, dass er nicht mehr abgefragt wird.
Features.Add(new EstablishedFeatureToggle("establishedFeature"));
<Funktionen> <schaltet> <add name="EstablishedFeature" etabliert="true"/> </toggles> </features>
Abhängigkeiten
Funktionen können von anderen Funktionen abhängen. Beispielsweise ist es manchmal praktisch, eine „Hauptfunktion“ und dann davon abhängige Unterfunktionen zu haben. Abhängigkeiten können in der Konfiguration als durch Kommas getrennte Liste angegeben werden.
var mainFeature = new BooleanToggle("mainFeature", true);var subFeature1 = new BooleanToggle("subFeature1", true);var subFeature2 = new BooleanToggle("subFeature2", true);var dependency1 = new DependencyToggle(subFeature1, mainFeature); var dependency2 = new DependencyToggle(subFeature2, mainFeature);features.Add(dependency1);features.Add(dependency2);
<Funktionen> <schaltet> <add name="SubFeature1" aktiviert="true" dependencies="MainFeature"/> <add name="SubFeature2" aktiviert="true" dependencies="MainFeature"/> <add name="MainFeature" aktiviert="true" /> </schaltet> </features>
Codefreundliche Initialisierung
IFeatureConfiguration Features = new FeatureConfiguration{new BooleanToggle("Feature1", true),new DateRangeToggle("Feature2",true,DateTime.Now.AddDays(-2),DateTime.Now.AddDays(3))};
IOC-freundlich durch IFeatureConfiguration- Instanzen oder die statische Feature.Instance -Backing-Instanz
For<IFeatureConfiguration>().Use(Features.Instance);
Funktionsumschaltdiagnose: IFeatureConfiguration.WhatDoIHave
Console.WriteLine(features.WhatDoIHave());
Name Feature1
IsEnabled True
Name Feature2
IsEnabled True
From 11/16/2012 3:32:23 PM
Until 11/21/2012 3:32:23 PM
Laden aus benutzerdefinierten Konfigurationsressourcen: Aufbau auf IConfigurationReader
0.3.4753.37554
MutableToggle entfernt
Es wurde die Möglichkeit hinzugefügt, eine Umschaltkonfiguration „einzufrieren“.
Die Validierung des Umschaltstatus (einschließlich Zyklen in Abhängigkeiten) erfolgt jetzt beim Hinzufügen zum Feature-Konfigurationscontainer.
0.3.4749.36197
Mechanismus zur Erkennung von Abhängigkeitszyklen. Diese Funktion ist nur aktiv, wenn Abhängigkeiten über die Anwendungskonfiguration konfiguriert werden.
Fehler behoben, bei dem ein DependencyToggle abhängig von einem anderen DependencyToggle dazu führen konnte, dass dem Funktionssatz doppelte Umschalter hinzugefügt wurden.
v0.3.4748.37146
Konfigurationsmechanismus für DependencyToggle
v0.2.4730.37739
DependencyToggle hinzugefügt.
Von einem Dictionary in ein ConcurrentDictionary geändert.
v0.2.4705.37094
Etablierte Funktionen hinzugefügt.
v0.1.4705.28808
DateRange-Umschaltung hinzugefügt.
Ziemlich viel internes Refactoring.
v0.1.4704.41742
Ursprüngliche Version: einfache Umschalter.