.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 management and experimentation systems within your .NET-based server applications.

🚧

Please 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

dotnet add package VWO.OpenFeature.Provider

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

APIArgumentsArgument DescriptionAPI Description
VWO.InitVWOInitOptions vwoInitOptionsSdkKey: 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: VWOvwoClient: 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": Valuekey: 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: VWOProvidervwoProvider: 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.GetBooleanValueAsyncfeatureKey: string, defaultValue: bool, context: EvaluationContextfeatureKey: 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.GetStringValueAsyncfeatureKey: string, defaultValue: string, context: EvaluationContextfeatureKey: 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.GetIntegerValueAsyncfeatureKey: string, defaultValue: int, context: EvaluationContextfeatureKey: 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.GetDoubleValueAsyncfeatureKey: string, defaultValue: double, context: EvaluationContextfeatureKey: 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.GetObjectValueAsyncfeatureKey: string, defaultValue: Value, context: EvaluationContextfeatureKey: 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.