OpenFeature Provider for .NET
Getting started
1. Install the provider
- Powershell / NuGet Package Manager Console
- .NET CLI
- Package Reference
Install-Package OpenFeature.Providers.ConfigCat
dotnet add package OpenFeature.Providers.ConfigCat
<PackageReference Include="OpenFeature.Providers.ConfigCat" />
2. Initialize the provider
The ConfigCatProvider constructor takes the SDK key and an optional callback that can be used to specify additional configuration options for the ConfigCat .NET SDK:
using System;
using ConfigCat.Client;
using OpenFeature.Providers.ConfigCat;
// Specify options for the ConfigCat SDK.
Action<ConfigCat.Client.Configuration.ConfigCatClientOptions> configureOptions = (options) =>
{
options.PollingMode = PollingModes.AutoPoll(pollInterval: TimeSpan.FromSeconds(60));
options.Logger = new ConsoleLogger(LogLevel.Warning);
// ...
};
// Configure the provider.
await OpenFeature.Api.Instance.SetProviderAsync(new ConfigCatProvider("#YOUR-SDK-KEY#", configureOptions));
// Create a client.
var client = OpenFeature.Api.Instance.GetClient();
For more information about all the configuration options, see the .NET SDK documentation.
3. Evaluate your feature flag
var isAwesomeFeatureEnabled = await client.GetBooleanValueAsync("isAwesomeFeatureEnabled", false);
if (isAwesomeFeatureEnabled)
{
doTheNewThing();
}
else
{
doTheOldThing();
}
4. Cleaning up
On application shutdown, clean up the OpenFeature provider and the underlying ConfigCat client.
await OpenFeature.Api.Instance.ShutdownAsync();
Evaluation Context
An evaluation context in the OpenFeature specification is a container for arbitrary contextual data that can be used as a basis for feature flag evaluation. The ConfigCat provider translates these evaluation contexts to ConfigCat User Objects.
The following table shows how the different context attributes are mapped to User Object attributes.
| Evaluation context | User Object | Required |
|---|---|---|
targetingKey (Id / Identifier) | Identifier | ☑ |
Email | Email | |
Country | Country | |
| Any other | Custom |
Remarks:
- If
targetingKeyis present in the evaluation context, it will be mapped to theIdentifierproperty. Otherwise,IdorIdentifierwill be mapped, whichever occurs first. (If none of these keys are present, theIdentifierproperty will be set to the fallback value"<n/a>".) - The keys
Id,Identifier,EmailandCountryare matched case-insensitively. If the same key appears in multiple cases - e.g.emailandEmail- the first occurrence will be mapped to the corresponding property. - All of the above will also be included in the
Customdictionary (except for the exact keysIdentifier,EmailandCountry). This allows them to be referenced using their original names in feature flag rules. - Other keys are mapped as custom user attributes with their values unchanged. (Although the ConfigCat SDK handles value conversion internally, it's recommended to use the type expected by the referencing feature flag rules. Read more here.)
To evaluate feature flags for a context, use the OpenFeature Evaluation API:
var context = OpenFeature.Model.EvaluationContext.Builder()
.SetTargetingKey("#SOME-USER-ID#")
.Set("Email", "[email protected]")
.Set("Country", "CountryID")
.Set("Rating", 4.5)
.Set("RegisteredAt", DateTime.Parse("2023-11-22 12:34:56 +00:00", System.Globalization.CultureInfo.InvariantCulture))
.Build();
var isAwesomeFeatureEnabled = await client.GetBooleanValueAsync("isAwesomeFeatureEnabled", false, context);