![]() |
VOOZH | about |
dotnet add package OpenFeature.Providers.Flagd --version 0.7.1
NuGet\Install-Package OpenFeature.Providers.Flagd -Version 0.7.1
<PackageReference Include="OpenFeature.Providers.Flagd" Version="0.7.1" />
<PackageVersion Include="OpenFeature.Providers.Flagd" Version="0.7.1" />Directory.Packages.props
<PackageReference Include="OpenFeature.Providers.Flagd" />Project file
paket add OpenFeature.Providers.Flagd --version 0.7.1
#r "nuget: OpenFeature.Providers.Flagd, 0.7.1"
#:package OpenFeature.Providers.Flagd@0.7.1
#addin nuget:?package=OpenFeature.Providers.Flagd&version=0.7.1Install as a Cake Addin
#tool nuget:?package=OpenFeature.Providers.Flagd&version=0.7.1Install as a Cake Tool
The flagd Flag provider allows you to connect to your flagd instance.
We will first install the OpenFeature SDK and the flagd provider.
dotnet add package OpenFeature.Providers.Flagd
NuGet\Install-Package OpenFeature.Providers.Flagd
<PackageReference Include="OpenFeature.Providers.Flagd" />
paket add OpenFeature.Providers.Flagd
// Install OpenFeature.Providers.Flagd as a Cake Addin
#addin nuget:?package=OpenFeature.Providers.Flagd
// Install OpenFeature.Providers.Flagd as a Cake Tool
#tool nuget:?package=OpenFeature.Providers.Flagd
This example assumes that the flagd server is running locally For example, you can start flagd with the following example configuration:
flagd start --uri https://raw.githubusercontent.com/open-feature/flagd/main/config/samples/example_flags.json
When the flagd service is running, you can use the SDK with the flagd Provider as in the following example console application:
using OpenFeature.Providers.Flagd;
namespace OpenFeatureTestApp
{
class Hello {
static void Main(string[] args) {
var flagdProvider = new FlagdProvider(new Uri("http://localhost:8013"));
// Set the flagdProvider as the provider for the OpenFeature SDK
OpenFeature.Api.Instance.SetProvider(flagdProvider);
var client = OpenFeature.Api.Instance.GetClient("my-app");
var val = client.GetBooleanValueAsync("myBoolFlag", false, null);
// Print the value of the 'myBoolFlag' feature flag
System.Console.WriteLine(val.Result.ToString());
}
}
}
You can also use the flagd Provider with the OpenFeature SDK and Dependency Injection. The following example shows how to do this using Microsoft.Extensions.DependencyInjection:
Before you start, make sure you have the OpenFeature.Hosting NuGet package installed:
dotnet add package OpenFeature.Hosting
Or with Package Manager:
NuGet\Install-Package OpenFeature.Hosting
Now you can set up Dependency Injection with OpenFeature and the flagd Provider in your Program.cs file. When not specifying any configuration options, the flagd Provider will use the default values for the variables as described below.
using OpenFeature;
using OpenFeature.DependencyInjection.Providers.Flagd;
namespace OpenFeatureTestApp
{
class Hello {
static void Main(string[] args) {
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenFeature(config =>
{
config.AddHostedFeatureLifecycle()
.AddFlagdProvider();
});
var app = builder.Build();
// ... ommitted for brevity
}
}
}
You can override the default configuration options by specifying properties on the FlagdProviderOptions on the AddFlagdProvider method.
using OpenFeature;
using OpenFeature.DependencyInjection.Providers.Flagd;
namespace OpenFeatureTestApp
{
class Hello {
static void Main(string[] args) {
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenFeature(config =>
{
config.AddHostedFeatureLifecycle()
.AddFlagdProvider(o =>
{
o.Host = builder.Configuration["FlagdProviderOptions:Host"];
o.Port = int.Parse(builder.Configuration["FlagdProviderOptions:Port"] ?? "8013");
// other configurations can be set here
});
});
var app = builder.Build();
// ... ommitted for brevity
}
}
}
The URI of the flagd server to which the flagd Provider connects to can either be passed directly to the constructor, or be configured using the following environment variables:
| Option name | Environment variable name | Type | Default | Values |
|---|---|---|---|---|
| host | FLAGD_HOST | string | localhost | |
| port | FLAGD_PORT | number | 8013 | |
| tls | FLAGD_TLS | boolean | false | |
| tls certPath | FLAGD_SERVER_CERT_PATH | string | ||
| unix socket path | FLAGD_SOCKET_PATH | string | ||
| Caching | FLAGD_CACHE | string | lru | |
| Maximum cache size | FLAGD_MAX_CACHE_SIZE | number | 10 | |
| Maximum event stream retries | FLAGD_MAX_EVENT_STREAM_RETRIES | number | 3 | |
| Resolver type | FLAGD_RESOLVER | string | rpc | rpc, in-process |
| Source selector | FLAGD_SOURCE_SELECTOR | string | ||
| Logger | n/a | n/a |
Note that if FLAGD_SOCKET_PATH is set, this value takes precedence, and the other variables (FLAGD_HOST, FLAGD_PORT, FLAGD_TLS, FLAGD_SERVER_CERT_PATH) are disregarded.
Note that if you are on NET462 through NET48 as the target framework for your project, you are required to enable TLS and supply a certificate path as part of your configuration. This is a limitation Microsoft has documented.
If you rely on the environment variables listed above, you can use the empty constructor which then configures the provider accordingly:
var flagdProvider = new FlagdProvider();
Alternatively, if you would like to pass the URI directly, you can initialise it as follows:
// either communicate with Flagd over HTTP ...
var flagdProvider = new FlagdProvider(new Uri("http://localhost:8013"));
// ... or use the unix:// prefix if the provider should communicate via a unix socket
var unixFlagdProvider = new FlagdProvider(new Uri("unix://socket.tmp"));
The flagd provider also supports the in-process provider mode,
which is activated by setting the FLAGD_RESOLVER env var to IN_PROCESS.
In this mode, the provider will connect to a service implementing the flagd.sync.v1 interface
and subscribe to a feature flag configuration determined by the FLAGD_SOURCE_SELECTOR.
After an initial retrieval of the desired flag configuration, the in-process provider will keep the latest known state in memory,
meaning that no requests need to be sent over the network for resolving flags that are part of the flag configuration.
Updates to the flag configuration will be sent via the grpc event stream established between the in-process provider and
the service implementing the flagd.sync.v1 interface (e.g. flagd-proxy).
Example of using the in-process provider mode:
using OpenFeature.Providers.Flagd;
namespace OpenFeatureTestApp
{
class Hello {
static void Main(string[] args) {
var flagdConfig = new FlagdConfigBuilder()
// set the host and port for flagd-proxy
.WithHost("localhost")
.WithPort("8015")
// set the resolver type to 'IN_PROCESS'
.WithResolverType(ResolverType.IN_PROCESS)
// provide the flag source selector, e.g. the name of a Flags custom resource which is watched by the flagd-proxy
.WithSourceSelector("core.openfeature.dev/flags/sample-flags")
.Build();
var flagdProvider = new FlagdProvider(flagdConfig);
// Set the flagdProvider as the provider for the OpenFeature SDK
OpenFeature.Api.Instance.SetProvider(flagdProvider);
var client = OpenFeature.Api.Instance.GetClient("my-app");
var val = client.GetBooleanValueAsync("myBoolFlag", false, null);
// Print the value of the 'myBoolFlag' feature flag
System.Console.WriteLine(val.Result.ToString());
}
}
}
By default the in-process provider will attempt to validate the flag configurations against the Flags and targeting schemas. If validation fails a warning log will be generated. You must configure a logger using the FlagdConfigBuilder. The in-process provider uses the Microsoft.Extensions.Logging abstractions.
var logger = loggerFactory.CreateLogger<Program>();
var flagdConfig = new FlagdConfigBuilder()
.WithLogger(logger)
.Build();
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 was computed. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 was computed. |
| .NET Framework | net461 net461 was computed. net462 net462 is compatible. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.