Stack Exchange
Наилучший вариант для конфигурации приложений .net
Как можно более изящно сконфигать серверные .net приложения? Сейчас столкнулся с таким вариантом, что чем больше репозиториев и сервисов у меня появляется, тем больше разрастается Program.cs в итоге получается вот такая свалка из конфигураций
builder.Services.AddAuthentication(
    options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    }).AddJwtBearer(
    it =>
    {
        var key = Encoding.ASCII.GetBytes(builder.Configuration["JWT:Secret"]);
        it.SaveToken = true;
        it.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(key),
            ValidateIssuer = false,
            ValidateAudience = false,
            RequireExpirationTime = true,
            ValidateLifetime = true
        };
    }
);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddScoped<IAccountRepository, AccountRepository>();
builder.Services.AddScoped<ICommunityRepository, CommunityRepository>();
builder.Services.AddScoped<IPostRepository, PostRepository>();
builder.Services.AddScoped<ITagsRepository, TagsRepository>();
builder.Services.AddScoped<AccountService>();
builder.Services.AddScoped<CommunityService>();
builder.Services.AddScoped<PostService>();
builder.Services.AddScoped<TagsService>();
builder.Services.AddScoped<GenerateTokenService>();

Вопрос: можно ли как-то изящно это конфигать в других классах?

Видите builder.Services.AddSwaggerGen();? Как думаете, что это? Есть-ли у Services такой метод? Думаю уже поняли, к чему я клоню?) Подобное делается методами расширения, которые лежат где-то, и в них прописана конкретная логика для подключения и настройки конкретного сервиса. Условно public static void AddSuperService(this IServiceCollection services){ ... services.AddScoped<...>(); ... } и далее, вместо всей портянки, вы пишете просто builder.Services.AddSuperService();, все.
