Η ανάρτηση δείχνει πώς μπορούν να εφαρμοστούν οι εναλλαγές ή οι διακόπτες δυνατοτήτων σε μια εφαρμογή ASP.NET Core χρησιμοποιώντας το Blazor. Το πακέτο Microsoft.FeatureManagement Nuget χρησιμοποιείται για την προσθήκη των εναλλαγών δυνατοτήτων.
Κώδικας: https://github.com/damienbod/AspNetCoreFeatures.Toggles

Ρύθμιση
Η εφαρμογή Blazor είναι μια απλή εφαρμογή που φιλοξενείται στον πυρήνα ASP.NET που χρησιμοποιεί το Azure AD για τον πάροχο ταυτότητας. Τόσο οι εφαρμογές διακομιστή όσο και οι εφαρμογές πελάτη πρέπει να εφαρμόσουν την εναλλαγή δυνατοτήτων.
Το έργο Blazor Server είναι μια εφαρμογή ASP.NET Core. Αυτό χρησιμοποιεί το Microsoft.FeatureManagement.AspNetCore Πακέτο Nuget. Η εφαρμογή Client είναι ένα έργο Blazor WASM και χρησιμοποιεί το Microsoft.FeatureManagement πακέτο.
Διακομιστής Blazor
ο AddFeatureManagement μπορεί να χρησιμοποιηθεί για την προσθήκη υπηρεσιών για προσθήκη ή αφαίρεση λειτουργιών. Πρόσθεσα μια συγκεκριμένη υπηρεσία η οποία προστίθεται μόνο όταν είναι ενεργοποιημένη η δυνατότητα. Αυτό διαβάζεται από τις ρυθμίσεις της εφαρμογής διακομιστή.
services.AddFeatureManagement();
var featureXEnabled = configuration.GetValue<bool>("FeatureManagement:FeatureX");
if(featureXEnabled)
{
services.AddScoped<FeatureXService>();
}
Το FeatureXApiController χρησιμοποιείται για τη διάθεση της επιχειρηματικής δυνατότητας για το Blazor UI. Σε αυτό το παράδειγμα, το IFeatureManager χρησιμοποιείται για να ελέγξει εάν η δυνατότητα είναι ενεργοποιημένη. Εάν ενεργοποιηθεί, καλείται η επιχείρηση, διαφορετικά επιστρέφεται ένα 404.
private IFeatureManager _featureManager;
private readonly FeatureXService _featureXService;
public FeatureXApiController(IFeatureManager featureManager,
FeatureXService featureXService)
{
_featureManager = featureManager;
_featureXService = featureXService;
}
[HttpGet]
public async Task<IActionResult> GetAsync()
{
var featureX = await _featureManager
.IsEnabledAsync(Features.FEATUREX);
if(featureX)
{
return Ok(new List<string> {
"some data",
"more data",
_featureXService.GetFeatureString()
});
}
return NotFound();
}
Η εφαρμογή ASP.NET Core Server χρησιμοποιεί την προεπιλογή Διαχείριση Χαρακτηριστικών ρυθμίσεις εφαρμογής. Μόνο ένα χαρακτηριστικό προστέθηκε σε αυτήν την εφαρμογή.
{
"FeatureManagement": {
"FeatureX": true
}
}
Πελάτης Blazor WASM
ο AddFeatureManagement χρησιμοποιείται για την προσθήκη της διαχείρισης δυνατοτήτων στο Blazor WASM UI.
builder.Services.AddFeatureManagement();
Ο έλεγχος χαρακτηριστικών μπορεί να χρησιμοποιηθεί με έγχυση του IFeatureManager διεπαφή. ο IsEnabledAsync μπορεί να χρησιμοποιηθεί για να ελέγξει εάν η δυνατότητα είναι ενεργοποιημένη.
@page "/featurexapi"
@inject IAntiforgeryHttpClientFactory httpClientFactory
@inject IJSRuntime JSRuntime
@using Microsoft.FeatureManagement
@using AspNetCoreFeatures.Toggles.Shared;
@inject IFeatureManager _featureManager
<h1>Data from Feature X API</h1>
@if (apiData == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Data</th>
</tr>
</thead>
<tbody>
@foreach (var data in apiData)
{
<tr>
<td>@data</td>
</tr>
}
</tbody>
</table>
}
@code {
private string[]? apiData;
public bool FeatureXEnabled { get; set; }
protected override async Task OnInitializedAsync()
{
var featureX = await _featureManager.IsEnabledAsync(Features.FEATUREX);
if (featureX)
{
var client = await httpClientFactory.CreateClientAsync();
apiData = await client.GetFromJsonAsync<string[]>("api/FeatureXApi");
}
}
}
Το Blazor WASM απαιτεί ρυθμίσεις εφαρμογής με τους ορισμούς λειτουργιών. Αυτό έχει αναπτυχθεί στο wwwroot φάκελο σε μια φιλοξενούμενη εφαρμογή ASP.NET Core.
{
"FeatureManagement": {
"FeatureX": true
}
}
Ο διακόπτης λειτουργιών μπορεί επίσης να χρησιμοποιηθεί στα στοιχεία του Razor UI. Το εξάρτημα μπορεί να χρησιμοποιήσει το OnInitializedAsync για να ελέγξετε εάν μια δυνατότητα είναι ενεργοποιημένη και να ορίσετε μια τιμή bool που μπορεί να χρησιμοποιηθεί στη διεπαφή χρήστη.
@using Microsoft.FeatureManagement
@using AspNetCoreFeatures.Toggles.Shared
@inject IFeatureManager _featureManager
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">Blazor AAD BFF Cookies</a>
<button class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="nav flex-column">
<AuthorizeView>
<Authorized>
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</li>
@if (FeatureXEnabled)
{
<li class="nav-item px-3">
<NavLink class="nav-link" href="featurexapi">
<span class="oi oi-list-rich" aria-hidden="true"></span> Feature X API call
</NavLink>
</li>
}
</Authorized>
<NotAuthorized>
<li class="nav-item px-3">
<p class="whiteColor">no access</p>
</li>
</NotAuthorized>
</AuthorizeView>
</ul>
</div>
@code {
private bool collapseNavMenu = true;
public bool FeatureXEnabled { get; set; }
protected override async Task OnInitializedAsync()
{
FeatureXEnabled = await _featureManager.IsEnabledAsync(Features.FEATUREX);
}
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
}
Η δυνατότητα μπορεί πλέον να ενεργοποιηθεί ή να απενεργοποιηθεί ανά διαμόρφωση.

ο Microsoft.FeatureManagement Το πακέτο Nuget παρέχει πολλούς περισσότερους βοηθούς διαχείρισης λειτουργιών και είναι πραγματικά χρήσιμος όταν χρειάζεται να υποστηρίξετε εναλλαγές λειτουργιών ή διακόπτες λειτουργιών σε μια λύση λογισμικού ή προϊόν.
Συνδέσεις
https://dev.to/karthikchintala/the-comprehensive-guide-to-feature-management-in-aspnet-core-23d1
https://learn.microsoft.com/en-us/dotnet/api/microsoft.featuremanagement?view=azure-dotnet-preview