44 lines
1.9 KiB
C#
44 lines
1.9 KiB
C#
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
|
using Microsoft.Extensions.Logging;
|
|
using StellaOps.Concelier.Core;
|
|
using StellaOps.Concelier.Merge.Jobs;
|
|
using StellaOps.Concelier.Merge.Options;
|
|
using StellaOps.Concelier.Merge.Services;
|
|
|
|
namespace StellaOps.Concelier.Merge;
|
|
|
|
public static class MergeServiceCollectionExtensions
|
|
{
|
|
public static IServiceCollection AddMergeModule(this IServiceCollection services, IConfiguration configuration)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(services);
|
|
ArgumentNullException.ThrowIfNull(configuration);
|
|
|
|
services.TryAddSingleton<CanonicalHashCalculator>();
|
|
services.TryAddSingleton<CanonicalMerger>();
|
|
services.TryAddSingleton<AliasGraphResolver>();
|
|
services.TryAddSingleton<AffectedPackagePrecedenceResolver>(sp =>
|
|
{
|
|
var options = configuration.GetSection("concelier:merge:precedence").Get<AdvisoryPrecedenceOptions>();
|
|
return options is null ? new AffectedPackagePrecedenceResolver() : new AffectedPackagePrecedenceResolver(options);
|
|
});
|
|
|
|
services.TryAddSingleton<AdvisoryPrecedenceMerger>(sp =>
|
|
{
|
|
var resolver = sp.GetRequiredService<AffectedPackagePrecedenceResolver>();
|
|
var options = configuration.GetSection("concelier:merge:precedence").Get<AdvisoryPrecedenceOptions>();
|
|
var timeProvider = sp.GetRequiredService<TimeProvider>();
|
|
var logger = sp.GetRequiredService<ILogger<AdvisoryPrecedenceMerger>>();
|
|
return new AdvisoryPrecedenceMerger(resolver, options, timeProvider, logger);
|
|
});
|
|
|
|
services.TryAddSingleton<MergeEventWriter>();
|
|
services.TryAddSingleton<AdvisoryMergeService>();
|
|
services.AddTransient<MergeReconcileJob>();
|
|
|
|
return services;
|
|
}
|
|
}
|