.NET Provider

Get Started

An OpenFeature Provider is a pluggable integration layer that connects the OpenFeature SDK to a specific feature flag management system (e.g., VWO or custom in-house solutions). OpenFeature is an open-source standard for feature flagging, designed to provide a vendor-agnostic approach, enabling organizations to switch between feature flagging tools without rewriting application code.

This VWO OpenFeature Provider for .NET helps you integrate Feature Experimentation systems into your .NET-based server applications.

GitHub Repo

Check this out

Published on NuGet

Check this out

OpenFeature Website

Check this out

OpenFeature Docs

Check this out

🚧

Note

This library is intended to be used in server-side contexts and has not been evaluated for use on mobile devices.

Requirements

.NET 6.0+

SDK Installation

using OpenFeature;
using OpenFeature.Model;
using VWOOpenFeatureProvider;
using VWOFmeSdk;
using VWOFmeSdk.Models.User;

static async Task Main(string[] args)
{
    var vwoInitOptions = new VWOInitOptions
    {
        SdkKey = "your-sdk-key-here",     // Replace with your SDK Key
        AccountId = 123456,               // Replace with your VWO Account ID
        Logger = new Dictionary<string, object>
        {
            { "level", "ERROR" }         // Logging level
        }
    };

    // Initialize the VWO client
    var vwoClient = VWO.Init(vwoInitOptions);

    // Initialize the VWO Provider
    var vwoProvider = new VWOProvider(vwoClient);

    // Get the client from OpenFeature API
    var client = Api.Instance.GetClient();

    // Test feature flags with variable key values
    await TestFlags();
}
static async Task TestFlags(FeatureClient client, EvaluationContext context)
{

    // Setting up the EvaluationContext
    var context = EvaluationContext.Builder()
        .Set("targetingKey", new Value("user-id"))
        .Set("key", new Value("variable-key")) // Replace with your variable key
        .Build();

    // Set the provider using OpenFeature API
    await Api.Instance.SetProviderAsync(vwoProvider);

    // Test boolean flag
    var boolResult = await client.GetBooleanValueAsync("feature-boolean", false, context);
    Console.WriteLine($"BOOL result: {boolResult}");

    // Test string flag
    var stringResult = await client.GetStringValueAsync("feature-string", "defaultString", context);
    Console.WriteLine($"STRING result: {stringResult}");

    // Test integer flag
    var intResult = await client.GetIntegerValueAsync("feature-integer", 0, context);
    Console.WriteLine($"INTEGER result: {intResult}");

    // Test float flag
    var floatResult = await client.GetDoubleValueAsync("feature-float", 0.0, context);
    Console.WriteLine($"FLOAT result: {floatResult}");

    // Test object flag
    var objectResult = await client.GetObjectValueAsync("feature-object", new Value(new Structure(new Dictionary<string, Value>())), context);
    Console.WriteLine($"OBJECT result: {objectResult}");
}

Usage

using OpenFeature;
using OpenFeature.Model;
using VWOOpenFeatureProvider;
using VWOFmeSdk;
using VWOFmeSdk.Models.User;

static async Task Main(string[] args)
{
    var vwoInitOptions = new VWOInitOptions
    {
        SdkKey = "your-sdk-key-here",     // Replace with your SDK Key
        AccountId = 123456,               // Replace with your VWO Account ID
        Logger = new Dictionary<string, object>
        {
            { "level", "ERROR" }         // Logging level
        }
    };

    // Initialize the VWO client
    var vwoClient = VWO.Init(vwoInitOptions);

    // Initialize the VWO Provider
    var vwoProvider = new VWOProvider(vwoClient);

    // Get the client from OpenFeature API
    var client = Api.Instance.GetClient();

    // Test feature flags with variable key values
    await TestFlags();
}
static async Task TestFlags(FeatureClient client, EvaluationContext context)
{

    // Setting up the EvaluationContext
    var context = EvaluationContext.Builder()
        .Set("targetingKey", new Value("user-id"))
        .Set("key", new Value("variable-key")) // Replace with your variable key
        .Build();

    // Set the provider using OpenFeature API
    await Api.Instance.SetProviderAsync(vwoProvider);

    // Test boolean flag
    var boolResult = await client.GetBooleanValueAsync("feature-boolean", false, context);
    Console.WriteLine($"BOOL result: {boolResult}");

    // Test string flag
    var stringResult = await client.GetStringValueAsync("feature-string", "defaultString", context);
    Console.WriteLine($"STRING result: {stringResult}");

    // Test integer flag
    var intResult = await client.GetIntegerValueAsync("feature-integer", 0, context);
    Console.WriteLine($"INTEGER result: {intResult}");

    // Test float flag
    var floatResult = await client.GetDoubleValueAsync("feature-float", 0.0, context);
    Console.WriteLine($"FLOAT result: {floatResult}");

    // Test object flag
    var objectResult = await client.GetObjectValueAsync("feature-object", new Value(new Structure(new Dictionary<string, Value>())), context);
    Console.WriteLine($"OBJECT result: {objectResult}");
}

API Details

API

Arguments

Argument Description

API Description

VWO.Init

VWOInitOptions vwoInitOptions

  • SdkKey : Unique key for authentication with VWO.
    AccountId : VWO account identifier.
    Logger
    *: Dictionary defining logging level.

Initializes the VWO client with the provided SDK key, account ID, and logging options.

new VWOProvider(vwoClient)

vwoClient: VWO

  • vwoClient*: The initialized VWO SDK client instance.

Creates a new instance of VWOProvider, integrating VWO with OpenFeature.

Api.Instance.GetClient()

None


Returns an OpenFeature client instance that is used for feature flag evaluations.

EvaluationContext.Builder()

None


Creates a builder instance to construct an EvaluationContext.

context.Set("key",
new Value("variable-key"))

"key": string, "value": Value

  • key : The attribute key to set.
    value
    *: The value associated with the key.

Sets a key-value pair inside the evaluation context.

context.Build()

None


Finalizes the EvaluationContext with set attributes.

await Api.Instance.SetProviderAsync(
vwoProvider)

vwoProvider: VWOProvider

  • vwoProvider*: The VWO provider instance that will handle feature flag evaluations.

Asynchronously sets the provider for OpenFeature, enabling it to evaluate feature flags using VWO.

await client.GetBooleanValueAsync

featureKey: string, defaultValue: bool, context: EvaluationContext

  • featureKey : The unique key representing the feature flag.
    defaultValue : The fallback boolean value if the flag evaluation fails.
    context
    *: The evaluation context containing user details and attributes.

Asynchronously fetches the boolean value of a feature flag.

await client.GetStringValueAsync

featureKey: string, defaultValue: string, context: EvaluationContext

  • featureKey : The unique key representing the feature flag.
    defaultValue : The fallback string value if the flag evaluation fails.
    context
    *: The evaluation context containing user details and attributes.

Asynchronously fetches the string value of a feature flag.

await client.GetIntegerValueAsync

featureKey: string, defaultValue: int, context: EvaluationContext

  • featureKey : The unique key representing the feature flag.
    defaultValue : The fallback integer value if the flag evaluation fails.
    context
    *: The evaluation context containing user details and attributes.

Asynchronously fetches the integer value of a feature flag.

await client.GetDoubleValueAsync

featureKey: string, defaultValue: double, context: EvaluationContext

  • featureKey : The unique key representing the feature flag.
    defaultValue : The fallback float value if the flag evaluation fails.
    context
    *: The evaluation context containing user details and attributes.

Asynchronously fetches the float value of a feature flag.

await client.GetObjectValueAsync

featureKey: string, defaultValue: Value, context: EvaluationContext

  • featureKey : The unique key representing the feature flag.
    defaultValue : The fallback object if the flag evaluation fails.
    context
    *: The evaluation context containing user details and attributes.

Asynchronously fetches the object value of a feature flag.