📄
src/Domain/Uploader.cs
using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; namespace Slopper.Domain; public sealed class Uploader(IServiceProvider serviceProvider, IClipRepository clipRepository) { public async Task Upload(string platform, CancellationToken cancellationToken) { var uploader = serviceProvider.GetRequiredKeyedService<IUploader>(platform); await foreach (var clip in clipRepository.GetNotUploadedTo(platform, cancellationToken)) { var upload = await uploader.Upload(clip, cancellationToken); clip.Uploads.Add(upload); await clipRepository.Save(clip, cancellationToken); } } } public static class UploaderServiceCollectionExtensions { extension(IServiceCollection services) { public IServiceCollection AddUploader() { services.AddTransient<Uploader>(); return services; } } }