1

我想在我的 .net 核心 api 中添加 LaunchDarkly 功能管理。在实时项目中,我该如何添加?

我有一个包含所有功能的接口文件。这个接口将如何参与 LD 调用?

我很困惑如何为配置创建通用文件并调用不同的控制器!任何帮助将不胜感激!

我在我的示例程序中做了什么..

  1. 我在 LD 网站上创建了一个标志,并将以下代码添加到 main

    Configuration ldConfig = LaunchDarkly.Client.Configuration
                 // TODO: Enter your LaunchDarkly SDK key here
                 .Default("YOUR_SDK_KEY");
    
         LdClient client = new LdClient(ldConfig);
         User user = User.Builder("bob@example.com")
           .FirstName("Bob")
           .LastName("Loblaw")
           .Custom("groups", "beta_testers")
           .Build();
    
         // TODO: Enter the key for your feature flag key here
         var value = client.BoolVariation("YOUR_FEATURE_FLAG_KEY", user, false);
    
         if (value)
         {
             Console.WriteLine("Showing feature for user " + user.Key);
         }
         else
         {
             Console.WriteLine("Not showing feature for user " + user.Key);
         }
    

但是现在我有一个包含大量代码、多个控制器的实时 api 项目。我怎样才能使这个 LD 类通用?请帮助我..谢谢

4

1 回答 1

2

首先,在 appsettings.json 中声明密钥。然后创建一个接口类来声明你想要的方法。

public interface IFeatureFlagsService
{
    T GetFeatureFlag<T>(string flagKey, string userKey);
}

现在实现这个接口

using LaunchDarkly.Client;

public class FeatureFlagsService : IFeatureFlagsService
{
private readonly LdClient _ldClient;

public FeatureFlagsService(IConfiguration configuration)
{
    _ldClient = new LdClient(configuration["LaunchDarkly:Key"]);
}

public T GetFeatureFlag<T>(string flagKey, string userKey = "anonymous")
{
    var user = User.WithKey(userKey);

    if (typeof(T).Equals(typeof(bool)))
        return (T)(object)_ldClient.BoolVariation(flagKey, user, default);
    else if (typeof(T).Equals(typeof(int)))
        return (T)(object)_ldClient.IntVariation(flagKey, user, default);
    else if (typeof(T).Equals(typeof(float)))
        return (T)(object)_ldClient.FloatVariation(flagKey, user, default);
    else if (typeof(T).Equals(typeof(string)))
        return (T)(object)_ldClient.StringVariation(flagKey, user, default);

    return default;
}
}

确保在 startup.cs 中注入配置

services.AddSingleton<IFeatureFlagsService>(sp => new FeatureFlagsService(configuration));

现在你可以在你的控制器中注入这个 IFeatureFlagService 并调用

_featureFlagService.GetFeatureFlag<bool>("isExternalUser");
于 2021-04-28T17:17:51.633 回答