öğretici: ASP.NET Core uygulamasında özellik bayraklarını kullanma

.net Core özellik yönetimi kitaplıkları, .net veya ASP.NET Core uygulamasında özellik bayraklarını uygulamak için ıdimatik destek sağlar. Bu kitaplıklar, deyimlerle özellikleri etkinleştirmek veya devre dışı bırakmak için el ile kod yazmak zorunda kalmazsınız, böylece kodlarınıza bildirimli olarak özellik bayrakları eklemenize olanak tanır if .

Özellik Yönetimi kitaplıkları Ayrıca arka planda özellik bayrakları yaşam döngülerini yönetir. Örneğin, kitaplıklar yenileme ve önbellek bayrak durumlarını veya bir istek çağrısı sırasında bayrak durumunun sabit olmasını garanti eder. ayrıca, ASP.NET Core kitaplığı MVC denetleyici eylemleri, görünümler, rotalar ve ara yazılım gibi kullanıma hazır tümleştirmeler sunmaktadır.

ASP.NET Core uygulama hızlı başlangıçlarına özellik ekleme bayrakları , bir ASP.NET Core uygulamasında özellik bayraklarının nasıl kullanılacağına ilişkin basit bir örnek gösterir. Bu öğretici, özellik yönetimi kitaplıklarının ek kurulum seçeneklerini ve yeteneklerini gösterir. Bu öğreticide gösterilen örnek kodu denemek için hızlı başlangıçta oluşturulan örnek uygulamayı kullanabilirsiniz.

ASP.NET Core feature management apı başvuru belgeleri için bkz. Microsoft. featuremanagement ad alanı.

Bu öğreticide şunların nasıl yapıldığını öğrenirsiniz:

  • Özellik kullanılabilirliğini denetlemek için uygulamanızın önemli bölümlerine özellik bayrakları ekleyin.
  • Özellik bayraklarını yönetmek için kullandığınızda uygulama yapılandırmasıyla tümleştirin.

Özellik yönetimini ayarlama

.net Core özellik yöneticisi 'ne erişmek için uygulamanızın Microsoft.FeatureManagement.AspNetCore NuGet pakete başvuruları olmalıdır.

.NET Core Özellik Yöneticisi, Framework 'ün yerel yapılandırma sisteminden yapılandırılır. Sonuç olarak, dosyanın veya ortam değişkenlerinin yerel appsettings.js de dahil olmak üzere .NET Core tarafından desteklenen herhangi bir yapılandırma kaynağını kullanarak uygulamanızın Özellik bayrağı ayarlarını tanımlayabilirsiniz.

Varsayılan olarak, Özellik Yöneticisi "FeatureManagement" .NET Core yapılandırma verilerinin bölümünden Özellik bayrağı yapılandırmasını alır. Varsayılan yapılandırma konumunu kullanmak için, Başlangıç sınıfının ConfigureServices metoduna geçirilen ıvicecollection 'ın addfeaturemanagement yöntemini çağırın.

using Microsoft.FeatureManagement;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddFeatureManagement();
    }
}

Yapılandırma. GetSection öğesini çağırarak ve istenen bölümün adını geçirerek, özellik yönetimi yapılandırmasının farklı bir yapılandırma bölümünden alınması gerektiğini belirtebilirsiniz. Aşağıdaki örnek, özellik yöneticisini bunun yerine farklı bir bölümden okumasını söyler "MyFeatureFlags" :

using Microsoft.FeatureManagement;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddFeatureManagement(Configuration.GetSection("MyFeatureFlags"));
    }
}

Özellik bayraklarınız içinde filtreler kullanıyorsanız, Microsoft. FeatureManagement. featurefilters ad alanını dahil etmeniz ve yöntemin genel türü olarak kullanmak istediğiniz filtrenin tür adını belirten addfeaturefilters öğesine bir çağrı eklemeniz gerekir. İşlevselliği dinamik olarak etkinleştirmek ve devre dışı bırakmak için özellik filtrelerini kullanma hakkında daha fazla bilgi için bkz. hedeflenen izleyiciler için özelliklerin aşamalı dağıtımını etkinleştirme.

Aşağıdaki örnek, adlı yerleşik bir özellik filtresinin nasıl kullanılacağını gösterir PercentageFilter :

using Microsoft.FeatureManagement;
using Microsoft.FeatureManagement.FeatureFilters;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddFeatureManagement()
                .AddFeatureFilter<PercentageFilter>();
    }
}

Özellik Bayraklarınızı uygulamanıza sabit olarak kodlamak yerine, özellik bayraklarını uygulamanın dışında tutmanızı ve ayrı olarak yönetmenizi öneririz. Bunun yapılması, bayrak durumlarını dilediğiniz zaman değiştirmenize ve bu değişikliklerin uygulamada hemen etkili olmasını sağlar. Azure uygulama yapılandırma hizmeti, tüm özellik Bayraklarınızı yönetmek için adanmış bir Portal Kullanıcı arabirimi sağlar. Azure uygulama yapılandırma hizmeti Ayrıca özellik bayraklarını uygulamanıza doğrudan .NET Core istemci kitaplıkları aracılığıyla da sunar.

ASP.NET Core uygulamanızı uygulama yapılandırmasına bağlanmanın en kolay yolu, NuGet paketine dahil edilen yapılandırma sağlayıcısıdır Microsoft.Azure.AppConfiguration.AspNetCore . pakete bir başvuru eklendikten sonra bu NuGet paketini kullanmak için aşağıdaki adımları izleyin.

  1. Program. cs dosyasını açın ve aşağıdaki kodu ekleyin.

    Önemli

    CreateHostBuilder``CreateWebHostBuilder.NET Core 3. x içindeki yerini alır. Ortamınıza göre doğru söz dizimini seçin.

    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
                webBuilder.ConfigureAppConfiguration(config =>
                {
                    var settings = config.Build();
                    config.AddAzureAppConfiguration(options =>
                        options.Connect(settings["ConnectionStrings:AppConfig"]).UseFeatureFlags());
                }).UseStartup<Startup>());
    
  2. Başlangıç. cs ' i açın ve Configure ConfigureServices adlı yerleşik ara yazılımı eklemek için ve metodunu güncelleştirin UseAzureAppConfiguration . bu ara yazılım, ASP.NET Core web uygulaması istekleri almaya devam ederken, özellik bayrağı değerlerinin yinelenen bir aralıkta yenilenmesini sağlar.

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseAzureAppConfiguration();
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAzureAppConfiguration();
    }
    

Tipik bir senaryoda, uygulamanızın dağıtımı ve etkinleştirilme ve farklı özellikleri gibi özellik bayrak değerlerinizi düzenli aralıklarla güncelleştirecektir. Varsayılan olarak, özellik bayrağı değerleri 30 saniyelik bir süre için önbelleğe alınır, bu nedenle, ara yazılım bir istek aldığında tetiklenen yenileme işlemi, önbelleğe alınan değerin süresi dolana kadar değeri güncelleştirmez. Aşağıdaki kod, Usefeatureflags çağrısında cacheexpirationınterval ayarlanarak önbelleğin süre sonu zamanının veya yoklama aralığının 5 dakikaya nasıl değiştirileceğini gösterir.

config.AddAzureAppConfiguration(options =>
    options.Connect(settings["ConnectionStrings:AppConfig"]).UseFeatureFlags(featureFlagOptions => {
        featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
    }));
});

Özellik bayrağı bildirimi

Her özellik bayrağı bildiriminde iki bölüm bulunur: bir ad ve bir özelliğin durumunun Açık olup olmadığını değerlendirmek için kullanılan bir veya daha fazla filtre listesi (yani, değeri olduğunda True ). Filtre, bir özelliğin açılması gereken zaman için bir ölçüt tanımlar.

Bir özellik bayrağının birden çok filtresi olduğunda, filtrenin etkin olması gerektiğini belirlerken filtre listesine bir düzen eklenir. Bu noktada, özellik bayrağı Açık ve kalan filtre sonuçları atlanır. Filtre yoksa, özelliğin etkinleştirilmesi gerektiğini gösteriyorsa, özellik bayrağı kapalıdır.

Özellik Yöneticisi özellik bayrakları için yapılandırma kaynağı olarak appsettings.js destekler. Aşağıdaki örnekte, bir JSON dosyasında özellik bayraklarının nasıl ayarlanacağı gösterilmektedir:

{"FeatureManagement": {
        "FeatureA": true, // Feature flag set to on
        "FeatureB": false, // Feature flag set to off
        "FeatureC": {
            "EnabledFor": [
                {
                    "Name": "Percentage",
                    "Parameters": {
                        "Value": 50
                    }
                }
            ]
        }
    }
}

Kurala göre, FeatureManagement Bu JSON belgesinin bölümü Özellik bayrağı ayarları için kullanılır. Önceki örnekte, içinde kendi filtreleri tanımlanmış olan üç özellik bayrakları gösterilmektedir EnabledFor :

  • FeatureAAçık.
  • FeatureBkapalıdır.
  • FeatureC özelliği olan adlı bir filtre belirtir Percentage Parameters . Percentage , yapılandırılabilir bir filtredir. Bu örnekte, Percentage FeatureC bayrağın Açık olması için yüzde 50 olasılık değerini belirtir. Özellik filtrelerini kullanma hakkında nasıl yapılır Kılavuzu için bkz. koşullu Özellik bayraklarını etkinleştirmek için özellik filtrelerini kullanma.

Ieaturemanager 'a erişmek için bağımlılık ekleme 'yi kullanma

Özellik bayrağı değerlerini el ile denetleme gibi bazı işlemlerde, Ifeaturemanager'ın bir örneğini almanız gerekir. ASP.NET Core MVC 'de, bağımlılık ekleme aracılığıyla özellik yöneticisine erişebilirsiniz IFeatureManager . Aşağıdaki örnekte, IFeatureManager bir denetleyicinin oluşturucusunun imzasına bir tür bağımsız değişkeni eklenir. Çalışma zamanı başvuruyu otomatik olarak çözer ve oluşturucuyu çağırırken bir arabirim sağlar. Denetleyicinin zaten oluşturucuda bir veya daha fazla bağımlılık ekleme bağımsız değişkenine sahip olduğu bir uygulama şablonu kullanıyorsanız (gibi) ILogger , yalnızca IFeatureManager ek bir bağımsız değişken olarak ekleyebilirsiniz:

using Microsoft.FeatureManagement;

public class HomeController : Controller
{
    private readonly IFeatureManager _featureManager;

    public HomeController(ILogger<HomeController> logger, IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }
}

Özellik bayrağı başvuruları

Koddan başvurmak için özellik bayraklarını dize değişkenleri olarak tanımlayın:

public static class MyFeatureFlags
{
    public const string FeatureA = "FeatureA";
    public const string FeatureB = "FeatureB";
    public const string FeatureC = "FeatureC";
}

Özellik bayrağı denetimleri

Özellik yönetiminin ortak bir özelliği, bir özellik bayrağının Açık olarak ayarlanmış olup olmadığını denetme ve bu durumda kodun bir bölümünü çalıştırma. Örnek:

IFeatureManager featureManager;
...
if (await featureManager.IsEnabledAsync(MyFeatureFlags.FeatureA))
{
    // Run the following code
}

Denetleyici eylemleri

MVC denetleyicileri sayesinde, FeatureGate bir denetleyici sınıfının veya belirli bir eylemin etkin olup olmadığını denetlemek için özniteliğini kullanabilirsiniz. Aşağıdaki HomeController denetleyicinin, FeatureA Denetleyici sınıfı içeren herhangi bir eylemde yürütülmesi gerekir:

using Microsoft.FeatureManagement.Mvc;

[FeatureGate(MyFeatureFlags.FeatureA)]
public class HomeController : Controller
{
    ...
}

Aşağıdaki Index eylemin FeatureA çalıştırılabilmesi için önce Açık olması gerekir:

using Microsoft.FeatureManagement.Mvc;

[FeatureGate(MyFeatureFlags.FeatureA)]
public IActionResult Index()
{
    return View();
}

Denetim özelliği bayrağı kapalı olduğu IÇIN bir MVC denetleyicisi veya eylemi engellendiğinde, kayıtlı bir ıdisabledfeatureshandler arabirimi çağırılır. Varsayılan IDisabledFeaturesHandler arabirim, yanıt gövdesi olmayan istemciye 404 durum kodu döndürür.

MVC görünümleri

Görünümler dizininde _ViewImports. cshtml dosyasını açın ve Feature Manager etiketi yardımcısını ekleyin:

@addTagHelper *, Microsoft.FeatureManagement.AspNetCore

MVC görünümlerinde, bir <feature> özellik bayrağının etkin olup olmadığına bağlı olarak içerik işlemek için bir etiketi kullanabilirsiniz:

<feature name="FeatureA">
    <p>This can only be seen if 'FeatureA' is enabled.</p>
</feature>

Gereksinimler karşılanmazsa, diğer içerikleri göstermek için negate özniteliği kullanılabilir.

<feature name="FeatureA" negate="true">
    <p>This will be shown if 'FeatureA' is disabled.</p>
</feature>

Özellik <feature> etiketi, bir listedeki herhangi bir özellik veya tüm özelliklerin etkinleştirilmesi halinde içerik göstermek için de kullanılabilir.

<feature name="FeatureA, FeatureB" requirement="All">
    <p>This can only be seen if 'FeatureA' and 'FeatureB' are enabled.</p>
</feature>
<feature name="FeatureA, FeatureB" requirement="Any">
    <p>This can be seen if 'FeatureA', 'FeatureB', or both are enabled.</p>
</feature>

MVC filtreleri

MVC filtrelerini bir özellik bayrağının durumuna göre etkinleştirilecek şekilde ayarlayabilirsiniz. Bu özellik ıasyncactionfilteruygulayan filtrelerle sınırlıdır. Aşağıdaki kod adlı bir MVC filtresi ekler ThirdPartyActionFilter . Bu filtre, yalnızca etkinse MVC işlem hattı içinde tetiklenir FeatureA .

using Microsoft.FeatureManagement.FeatureFilters;

IConfiguration Configuration { get; set;}

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(options => {
        options.Filters.AddForFeature<ThirdPartyActionFilter>(MyFeatureFlags.FeatureA);
    });
}

Ara yazılım

Özellik bayraklarını, uygulama dallarını ve ara yazılımı koşullu olarak eklemek için de kullanabilirsiniz. Aşağıdaki kod yalnızca etkin olduğunda istek ardışık düzenine bir ara yazılım bileşeni ekler FeatureA :

app.UseMiddlewareForFeature<ThirdPartyMiddleware>(MyFeatureFlags.FeatureA);

Bu kod, bir özellik bayrağını temel alarak tüm uygulamayı dallandırmak için daha genel özelliği devre dışı bırakır:

app.UseForFeature(featureName, appBuilder => {
    appBuilder.UseMiddleware<T>();
});

Sonraki adımlar

bu öğreticide, kitaplıkları kullanarak ASP.NET Core uygulamanızda özellik bayraklarını nasıl uygulayacağınızı öğrendiniz Microsoft.FeatureManagement . ASP.NET Core ve uygulama yapılandırmasındaki özellik yönetimi desteği hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: