// Licensed under AGPL-3.0-or-later. Copyright (C) 2026 StellaOps Contributors.
// Sprint: SPRINT_20260110_012_008_POLICY
// Task: FCG-003 - Policy Engine Integration
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using StellaOps.Policy.Gates;
namespace StellaOps.Policy.Predicates.FixChain;
///
/// Extension methods for registering FixChain gate services.
///
public static class FixChainGateExtensions
{
///
/// Adds FixChain gate predicate services to the service collection.
///
/// Service collection.
/// Configuration section for options.
/// Service collection for chaining.
public static IServiceCollection AddFixChainGate(
this IServiceCollection services,
IConfiguration? configuration = null)
{
ArgumentNullException.ThrowIfNull(services);
// Register options
if (configuration is not null)
{
services.AddOptions()
.Bind(configuration.GetSection("Policy:Predicates:FixChainGate"))
.ValidateDataAnnotations()
.ValidateOnStart();
}
else
{
services.TryAddSingleton(new FixChainGateOptions());
}
// Register core services
services.TryAddSingleton();
services.TryAddSingleton();
// Register adapter for policy gate registry
services.TryAddSingleton();
return services;
}
///
/// Adds FixChain gate predicate services with custom options.
///
/// Service collection.
/// Options configuration delegate.
/// Service collection for chaining.
public static IServiceCollection AddFixChainGate(
this IServiceCollection services,
Action configureOptions)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configureOptions);
services.Configure(configureOptions);
// Register core services
services.TryAddSingleton();
services.TryAddSingleton();
// Register adapter for policy gate registry
services.TryAddSingleton();
return services;
}
///
/// Registers the FixChain gate with the policy gate registry.
///
/// Policy gate registry.
/// Registry for chaining.
public static IPolicyGateRegistry RegisterFixChainGate(this IPolicyGateRegistry registry)
{
ArgumentNullException.ThrowIfNull(registry);
registry.Register("fixChainRequired");
return registry;
}
}