LogoLogo
  • Dosaic
  • Hosting
    • WebHost
    • Generator
    • Abstractions
  • Plugins
    • Authorization
      • Abstractions
      • Keycloak
    • Endpoints
      • Abstractions
      • RestResourceEntity
    • Handlers
      • Abstractions
      • CQRS
    • Jobs
      • Hangfire
    • Management
      • Unleash
    • Mapping
      • Mapster
    • Messaging
      • Abstractions
      • MassTransit
    • Persistence
      • Abstractions
      • EntityFramework
      • InMemory
      • MongoDb
      • S3
      • VaultSharp
    • Validations
      • Abstractions
      • Attribute
  • Extensions
    • RestEase
    • Sqids
  • Testing
    • NUnit
Powered by GitBook
On this page
  • Installation
  • Configuration
  • Usage
  • Feature flag checks
  • Controller & Actions
  • MVC Views
  • MVC Filters
  • Middleware
  1. Plugins
  2. Management

Unleash

Dosaic.Plugins.Management.Unleash is a plugin that allows to use feature flags to enable CI/CD with control when and how are features enabled .

Installation

To install the nuget package follow these steps:

dotnet add package Dosaic.Plugins.Management.Unleash

or add as package reference to your .csproj

<PackageReference Include="Dosaic.Plugins.Management.Unleash" Version="" />

This plugin uses

  • https://github.com/microsoft/FeatureManagement-Dotnet (feature flags abstraction)

  • https://github.com/Unleash/unleash-client-dotnet (client sdk)

  • https://github.com/Unleash/unleash (server)

Configuration

unleash:
  appName: "my-fancy-app"
  apiUri: "http://localhost:4242/api/"
  apiToken: "[create-in-local-instance-web-ui]"
  projectId: "default" //in free/opensource mode there is just one project, always the same
  instanceTag: "my-fancy-backup2"
  environment: "development"

Usage

Feature flag checks


public class ExampleService
{
    private readonly IFeatureManager _featureManager;

    public ExampleService(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }

    public void CheckFeatureFlag()
    {
         var isEnabled= await featureManager.IsEnabledAsync("myFeatureFlag");
    }

    public void CheckFeatureFlagWithActivatedContextualUserIdFilter()
    {
          var isEnabled = await featureManager.IsEnabledAsync("hello", new UserIdContext(){UserId = "id1"});
    }
}

see also https://learn.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core?tabs=core6x#feature-flag-checks

Controller & Actions

    [ApiController, Route("test")]
    [FeatureGate("my-feature-flag-for-a-whole-controller")]
    public class TestController : ControllerBase
    {
        [HttpGet]
        [FeatureGate("my-feature-flag-for-get-action")]
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        [FeatureGate("my-feature-flag-for-post-action")]
        public IActionResult Create()
        {
            return View();
        }
    }

see also https://learn.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core?tabs=core6x#controller-actions

MVC Views

@addTagHelper *, Microsoft.FeatureManagement.AspNetCore
<feature name="FeatureA">
    <p>This can only be seen if 'FeatureA' is enabled.</p>
</feature>

see also https://learn.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core?tabs=core6x#controller-actions

MVC Filters

using Microsoft.FeatureManagement.FeatureFilters;

IConfiguration Configuration { get; set;}

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

see also https://learn.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core?tabs=core6x#controller-actions

Middleware

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

see also https://learn.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core?tabs=core6x#middleware

PreviousManagementNextMapping

Last updated 3 months ago