FeatureToggle.Azure is a collection of FeatureToggle providers for various Azure services. The providers support centralized storage of feature toggles in Azure. For more information on how to implement and leverage features toggles, using FeatureToggle, see the official docs for FeatureToggle
- FeatureToggle Provider for Azure DocumentDB, (learn more)
- FeatureToggle Provider for Azure Table storage, (learn more)
- FeatureToggle Provider for Service Fabric configuration packages, (learn more)
FeatureToggle provider for storing feature toggles as simple json documents in Azure DocumentDB (part of Azure Cosmos DB). The nuget package can be found on nuget.org.
- Install
FeatureToggle.Azure.DocumentDBfrom nuget into your project. - Configure
DocumentDbProviderat application startup, such as in Global.asax or Startup.cs by specifying the DocumentDb service uri and authentication key needed to store and retreive features toggles in DocumentDB. Global.asax example:
protected void Application_Start()
{
// other startup configuration
DocumentDbProvider.Configure("https://[serviceuri]", "[authkey]");
}- Add a class to your project representing the feature that needs to be controlled, e.g.
PrintFeatureand inherit fromDocumentDbToggle
public class PrintFeature : DocumentDbToggle
{
}- Use the new feature toggle in your code to isolate features.
public ActionResult Index()
{
ViewBag.EnablePrint = Is<PrintFeature>.Enabled;
return View();
}- Add a json document in DocumentDB, either using the Data Explorer in the Azure Portal or the standalone Azure Storage Explorer (ASE) or through the client API of DocumentDB in order to turn on/off the feature. The document looks like this:
{
"id": "PrintFeature",
"Enabled": false
}In order to control how the DocumentDbProvider fetches feature toggles from DocumentDb, the provider can be configured through an instance of DocumentDbConfiguration passed to the overloaded static method DocumentDbProvider.Configure(docDbConfig).
The following options can be controlled through the configuration instance:
AuthKeyThe authorization key for the Cosmos DB account.ServiceEndpointThe service endpoint for the Cosmos DB account.DatabaseIdDatabase id (name) where toggles are stored. Defaults to FeatureToggle.CollectionIdDocument Collection id (name) where toggles are stored. Defaults to Toggles.AutoCreateDatabaseAndCollectionEnable auto creation of database and collection for storing toggles. When set to true, the AuthKey must have permission to create database and collections. Defaults to false.AutoCreateFeatureEnable auto creation of toggles as a json documents. When set to true, the AuthKey must have write permissions to the document collection. Defaults to false.
NOTE: The id property the json document representing the feature toggle must match the name of the class representing the feature toggle.
The DocumentDbProvider supports feature toggles such as FeatureToggle.EnabledOnOrBeforeDateFeatureToggle and FeatureToggle.EnabledOnOrAfterDateFeatureToggle, part of the FeatureToggle package, that must be installed seperately from the provider.
Example of a feature toggle that will enable on a specific date and time:
public class ComingSoonFeature : EnabledOnOrAfterDateFeatureToggle
{
public ComingSoonFeature()
{
this.ToggleValueProvider = new DocumentDbProvider();
}
}The json document to control the feature toggle looks like this:
{
"id": "ComingSoonFeature",
"ToggleTimestamp": "2018-05-24T20:21:00"
}The DocumentDbProvider supports feature toggles such as FeatureToggle.EnabledBetweenDatesFeatureToggle, part of the FeatureToggle package, that must be installed seperately from the provider.
Example of a feature toggle that will enable during a specific period:
public class LimitedTimeFeature : EnabledBetweenDatesFeatureToggle
{
public LimitedTimeFeature()
{
this.ToggleValueProvider = new DocumentDbProvider();
}
}The json document to control the feature toggle looks like this:
{
"id": "LimitedTimeFeature",
"Start": "2018-08-15T00:00:00",
"End": "2018-08-20T23:59:59"
}FeatureToggle provider for storing feature toggles as table entities in Azure Table storage (part of Azure Storage Accounts). The nuget package can be found on nuget.org.
- Install
FeatureToggle.Azure.TableStoragefrom nuget into your project. - Configure
TableStorageProviderat application startup, such as in Global.asax or Startup.cs by specifying the connection string for the Azure Storage Account that will be used to store and retreive features toggles in Table storage. Global.asax example:
protected void Application_Start()
{
// other startup configuration
TableStorageProvider.Configure("[azurestorage_connectionstring]");
}- Add a class to your project representing the feature that needs to be controlled, e.g.
PrintFeatureand inherit fromTableStorageToggle
public class PrintFeature : TableStorageToggle
{
}- Use the new feature toggle in your code to isolate features.
public ActionResult Index()
{
ViewBag.EnablePrint = Is<PrintFeature>.Enabled;
return View();
}- Add a table entity in Table storage, either using the Cloud Explorer in the Visual Studio or the standalone Azure Storage Explorer (ASE) or through the client API of Table storage in order to turn on/off the feature. The table entity must have the following properties:
- PartitionKey: Value must be the assembly name containing the feature toggle, unless overriden in configuration, see below.
- RowKey: Value must be the class name of the feature toggle.
- Enabled: true/false boolean value.
In order to control how the TableStorageProvider fetches feature toggles from Table Storage, the provider can be configured through an instance of TableStorageConfiguration passed to the overloaded static method TableStorageProvider.Configure(tableStorageconfig).
The following options can be controlled through the configuration instance:
ConnectionStringThe connection string to the storage account for Azure Table Storage.TableNameThe table name where toggles are stored. Defaults to FeatureToggles.AutoCreateTableEnable auto creation of the table storing toggles. When set to true, the connection string SAS token must have permission to create tables. Defaults to false.AutoCreateFeatureEnable auto creation of toggles as table entities. When set to true, the connection string SAS token must have write permissions to the table. Defaults to false.PartitionKeyResolverProvides the option to define the table partition key through a function. Defaults to the assembly name containing the feature toggle.
NOTE: The RowKey of the table entity representing the feature toggle must match the name of the class representing the feature toggle.
The TableStorageProvider supports feature toggles such as FeatureToggle.EnabledOnOrBeforeDateFeatureToggle and FeatureToggle.EnabledOnOrAfterDateFeatureToggle, part of the FeatureToggle package, that must be installed seperately from the provider.
Example of a feature toggle that will enable on a specific date and time:
public class ComingSoonFeature : EnabledOnOrAfterDateFeatureToggle
{
public ComingSoonFeature()
{
this.ToggleValueProvider = new TableStorageProvider();
}
}The table entity that controls the feature toggle must have a DateTime property called ToggleTimestamp.
The TableStorageProvider supports feature toggles such as FeatureToggle.EnabledBetweenDatesFeatureToggle, part of the FeatureToggle package, that must be installed seperately from the provider.
Example of a feature toggle that will enable during a specific period:
public class LimitedTimeFeature : EnabledBetweenDatesFeatureToggle
{
public LimitedTimeFeature()
{
this.ToggleValueProvider = new TableStorageProvider();
}
}The table entity that controls the feature toggle must have a DateTime property called Start and a DateTime property called End.
FeatureToggle provider for storing feature toggles in Service Fabric configuration packages (Settings.xml files). The nuget package can be found on nuget.org.
- Install
FeatureToggle.Azure.ServiceFabricfrom nuget into your project. - Add a class to your project representing the feature that needs to be controlled, e.g.
CoolNewFeatureToggleand inherit fromServiceFabricToggle
public class CoolNewFeatureToggle : ServiceFabricToggle
{
}- Use the new feature toggle in your code to isolate features.
public IActionResult Index()
{
ViewData["Message"] = Is<CoolNewFeatureToggle>.Enabled ? "Cool Feature enabled" :-D" : "No cool feature for U :-[";
return View();
}- Add a configuration section and parameter to the Settings.xml file in PackageRoot\Config folder in order to turn on/off the feature. Like so:
<Section Name="Features">
<Parameter Name="FeatureToggle.CoolNewFeatureToggle" Value="true" />
</Section>If needed it is possible to control how and where the ServiceFabricConfigProvider fetches features toggles from SF configuration packages. The provider can be configured using the static method Configure which must be done when the Service Fabric service starts. The following parameters can be set:
configPackageNameThe name of the Service Fabric configuration package. Defaults to Config.configSectionNameThe configuration section name in Settings.xml that hold feature toggles. Defaults to Features.usePrefixControls whether features toggles must be prefixed with FeatureToggle. Defaults to true.
NOTE: The parameter name attribute in Settings.xml representing the feature toggle must match the name of the class representing the feature toggle, and unless disabled (see above) it must be prefixed with FeatureToggle.
The ServiceFabricConfigProvider supports feature toggles such as FeatureToggle.EnabledOnOrBeforeDateFeatureToggle and FeatureToggle.EnabledOnOrAfterDateFeatureToggle, part of the FeatureToggle package, that must be installed seperately from the provider.
Example of a feature toggle that will enable on a specific date and time:
public class ComingSoonFeature : EnabledOnOrAfterDateFeatureToggle
{
public ComingSoonFeature()
{
this.ToggleValueProvider = new ServiceFabricConfigProvider();
}
}The Settings.xml config file that controls the feature toggle looks like this:
<Section Name="Features">
<Parameter Name="FeatureToggle.ComingSoonFeature" Value="24-May-2018 20:44:00" />
</Section>The ServiceFabricConfigProvider supports feature toggles such as FeatureToggle.EnabledBetweenDatesFeatureToggle, part of the FeatureToggle package, that must be installed seperately from the provider.
Example of a feature toggle that will enable during a specific period:
public class LimitedTimeFeature : EnabledBetweenDatesFeatureToggle
{
public LimitedTimeFeature()
{
this.ToggleValueProvider = new ServiceFabricConfigProvider();
}
}The Settings.xml config file that controls the feature toggle looks like this:
<Section Name="Features">
<Parameter Name="FeatureToggle.LimitedTimeFeature" Value="15-Aug-2018 00:00:00 | 20-Aug-2018 23:59:59" />
</Section>The samples folder contains a single Samples.sln solution containing samples of the 3 FeatureToggle providers from the FeatureToggle.Azure packages. In order try these out locally, the following must be installed:
- Service Fabric SDK with local cluster setup which can be downloaded through Web Platform Installer
- Cosmos DB Emulator
- Azure Storage Emulator
The project WebApplication is a standard ASP.NET Web App (.NET Framework) showing how to configure and use FeatureToggle.Azure.DocumentDB and FeatureToggle.Azure.TableStorage. The configuration of the providers is located in the Global.asax.csfile. Both providers are configured for using local emulators with auto creation of storage and toggles.
Feature toggles are found in the FeatureToggles folder and are used in the HomeController.
- The
FrontPageUIFeatureis a boolean FeatureToggle, and toggles a message on the Front page of the web app and is stored in Table Storage (emulator). - The
AboutPageFeatureis a boolean FeatureToggle, and toggles a message on the About page of the web app and is stored in DocumentDb (emulator). - The
ComingSoonFeatureis a DateTime FeatureToggle, and toggles a message on the the Front page of the web app and is stored in DocumentDb (emulator). - The
RetiringSoonFeatureis a DateTime FeatureToggle, and toggles a message on the Contact page of the web app and is stored in Table Storage (emulator). - The
LimitedTimeFeatureis a Period FeatureToggle, and toggles a message on the Front page of the web app and is stored in Table Storage (emulator).
In order to change the toggle values after creation, you can use the Cloud Explorer in Visual Studio or the Azure Storage Explorer.
The project SfWebAppCore is a ASP.NET Core Web App packaged as a Service Fabric application (the ServiceFabricApplication project). This sample shows how to configure and use FeatureToggle.Azure.ServiceFabric. The optional configuration of the provider is located in the Startup.cs file. The configuration package is located in PackageRoot/Config/Settings.xml file of the SfWebAppCore project.
Feature toggles are found in the FeatureToggles folder and are used in the HomeController.
- The
CoolNewFeatureToggleis a boolean FeatureToggle, and toggles a message on the About page of the web app. - The
ComingSoonFeatureis a DateTime FeatureToggle, and toggles a message on the Front page of the web app. - The
RetiringSoonFeatureis a DateTime FeatureToggle, and toggles a message on the Contact page of the web app. - The
LimitedTimeFeatureis a Period FeatureToggle, and toggles a message on the Front page of the web app.
In order to toggle the value, the configuration package must be packaged and deployed to the local cluster.