カスタム機能フラグの実装


これはフラグを維持するAzureアプリ構成サービスを使用して実装されてオン機能フラグからの継続です.ちょっと繰り返して、機能管理はconfigファイルを使って実装されることができます、しかし、この記事はAzureアプリ構成サービスに接続している特徴旗を実行しようとしています.

導入


機能をオン/オフするブール機能フラグの実装について説明します.この記事では、カスタム機能フラグを実装しようとしています.マイクロソフトはほとんど定義されていないカスタム機能フラグや機能フィルタをターゲットにしています.この記事では、カスタムロジックでフィルタグランドアップを構築しています.

ヒア コード更新


カスタマーフィルタを作成するのはクラスを作成し、Microsoft.FeatureManagement.IFeatureFilterを実装するのと同じくらい簡単です.それはthats!私が表示したいのは、どのようにしてこのクラスをアプリケーションフローに配線し、Azureアプリケーションの設定でフラグを設定するかです.
下記の機能フィルタクラスと論理実装のためのいくつかのサポートクラスです
//The feature filter will be known my this name in the configuration.
[FilterAlias("ShortTimeFeature")]
public class SecondsFeatureFilter : Microsoft.FeatureManagement.IFeatureFilter
    {
        private readonly IMinuteFeaturePropertyAccessor minuteFeatureContextAccessor;

        //The IMinuteFeaturePropertyAccessor is an implementation that I have used to capture first load 
        // time of the application. The IMinuteFeaturePropertyAccessor is loaded as a singleton in DI.
        public SecondsFeatureFilter(IMinuteFeaturePropertyAccessor minuteFeatureContextAccessor)
        {
            this.minuteFeatureContextAccessor = minuteFeatureContextAccessor;
        }

        public Task<bool> EvaluateAsync(FeatureFilterEvaluationContext context)
        {
            //The logic is to disable the feature after configured seconds the user has used the application
            //The seconds is configured as parameter in the feature flag.
            var EnabledSeconds = int.Parse(context.Parameters.GetSection("EnabledSeconds").Value);
            if (DateTime.Now.Subtract(minuteFeatureContextAccessor.GetStartTime()).TotalSeconds > EnabledSeconds)
            {
                return Task.FromResult(false);
            }
            return Task.FromResult(true);
        }
    }

    public class MinuteFeturePropertyAccessor : IMinuteFeaturePropertyAccessor
    {
        readonly DateTime startTime;
        public MinuteFeturePropertyAccessor()
        {
            startTime = DateTime.Now;
        }

        public DateTime GetStartTime()
        {
            return startTime;
        }
    }

    public interface IMinuteFeaturePropertyAccessor
    {
        DateTime GetStartTime();
    }
機能フィルタが作成されると、機能管理ミドルウェアに追加する必要があります.ミドルウェアは、アプリケーションのフロー(ナビゲーションリンク、アクションフィルター、FilterManagerチェック)でフラグチェックがトリガーされたときにフィルタークラスが起動されることを確認します.
Configuration Serviceメソッドの下に、フィーチャーフィルターが追加され、サンプルのサポートクラスが追加されます.
 public void ConfigureServices(IServiceCollection services)
        {
            services.AddSession();
            services.AddHttpContextAccessor();
            services.AddControllersWithViews();
            services.AddSingleton<IMinuteFeaturePropertyAccessor, MinuteFeturePropertyAccessor>();
            services.AddFeatureManagement().AddFeatureFilter<SecondsFeatureFilter>();
            services.AddAzureAppConfiguration();
        }
方法機能フラグは、アプリケーションで使用することができます正確に前の記事で説明したとおりです.機能フラグはtimelimitと呼ばれます.以下のコード例
 [FeatureGate("TimeLimit")]
 public async Task<IActionResult> Index()
    {
        return View();
    }
スタートアップとプログラムクラスの残りは、基本的にAzureアプリ構成統合を実装します.
Azureで設定項目を作成するには、Azureアプリケーション構成サービスでフィーチャーエクスプローラーを使用します.
  • 機能フラグを追加し、コードtimelimitで使用されたものと同じ機能名を入力し、使用する機能フィルターをチェックし、カスタムを選択します.
  • カスタム機能フィルタ名の
  • では、FeedureFilter alias Attribute ShortTimeFeaturesで指定されたフィーチャーフィルタ名を入力します.

  • 3つのドットをクリックし、パラメータを編集し、フィーチャーフィルタの実装に使用されるパラメーター名と値を入力します.


    また、Azureアプリケーション構成接続文字列をアプリケーションのコンフィグファイルに追加/更新するようにしてください.また、機能エクスプローラーで機能フラグが有効になっていることを確認してください.今、私たちは機能フラグと依存の構成を配線し、アプリケーションを実行する準備が整いました.
  • 結論


    このコードは、ユーザーがアプリケーションを開いた後、あなたの機能は60 secsのために有効になります.ポスト60 secs機能は、ベータコードの短いプレビューのように無効になります.前述のように、これは単にカスタム機能フラグを実装することがいかに簡単であるかを示すことであり、異なったビジネスニーズに基づいた制御機能です.