Skip to content

Releases: Calabonga/Calabonga.AspNetCore.AppDefinitions

v4.0.0

20 Nov 03:09
ece792a

Choose a tag to compare

NET9 migration

What's Changed

Full Changelog: v3.0.0...v4.0.0

v3.0.0

20 Nov 02:51
f3e3fc2

Choose a tag to compare

What's Changed

Full Changelog: v2.4.3...v3.0.0

v2.4.3

11 Apr 07:53
dce8d49

Choose a tag to compare

What's Changed

Full Changelog: v2.4.2...v2.4.3

v2.4.2

11 Apr 04:25
951b125

Choose a tag to compare

Версия 2.4.2

  • Для ConfgureApplication() и для ConfigureServices() теперь есть свой собственный индекс сортировки.
  • Переработана информация при логировании в ILogger.
  • Исправлены некоторые синтаксические ошибки, а также добавлены новые. :)

What's Changed

Full Changelog: v2.4.1...v2.4.2

v2.4.1

15 Jan 01:14
fcc7f26

Choose a tag to compare

  • Nuget-пакеты обновлены для использования NET8
  • Был добавлен перехват ошибок при поиске модулей определений (AppDefinition).

v2.4.0

22 Nov 04:04
823e550

Choose a tag to compare

Welcome NET8.0

v2.3.0

06 Nov 07:36
7b3a68f

Choose a tag to compare

Версия 2.3.0

Добавлена обработка дубликатов AppDefinitions, которые были найдены в сторонних сборках. Дополнительная информация о найденных дубликатах определений теперь выводиться в процессе отладке (DEBUG) включенном в настройках логирования.

Изменения подробно: https://github.com/Calabonga/Calabonga.AspNetCore.AppDefinitions/pull/1/files

v2.2.0

10 Aug 11:08

Choose a tag to compare

Версия 2.2.0
Создан шаблон для генерации проекта ASP.NET Web API c AppDefinitions. То есть, чтобы не устанавливать каждый раз Calabonga.AspNetCore.AppDefinitions nuget-пакет в новый (в пустой) проект, можно воспользоваться уже готовым шаблоном, который создаст приложение с установленным nuget-пакетом (плюс еще Serilog). Это гораздо быстрее и удобнее. Я использую этот шаблона в своих видео на своём канале boosty.to/calabonga.

Проект шаблона с инструкцией по использованию.

v2.1.0

06 Aug 08:59

Choose a tag to compare

Версия 2.1.0

  • В новой версии появилась возможность подключения модулей к проекту. Достаточно воспользовать новым способом регистрации.
// Вместо этого (instead of)
builder.AddDefinitions(typeof(Program));

// использовать этот (use this to add definitions for application)
const string moduleFolder = "Modules:Folder";
var modulesPath = builder.Configuration[moduleFolder] ?? throw new ArgumentNullException(moduleFolder);
builder.AddDefinitionsWithModules(modulesPath, typeof(Program));
  • Вывод зарегистрированных AppDefinitions усовершенствована.
[15:43:03 DBG] [AppDefinitions]: From Program
[15:43:03 DBG] [AppDefinitions]: AuthorizationDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: AuthorizeEndpoints (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: AutomapperDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: CommonDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: ContainerDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: CorsDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: DataSeedingDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: DbContextDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: ErrorHandlingDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: ETagGeneratorDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: EventItemEndpoints (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: FluentValidationDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: MediatorDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: OpenIddictDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: ProfilesEndpoints (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: SwaggerDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: TokenEndpoints (Program) (Enabled: Yes)
[15:43:03 DBG] [AppDefinitions]: UnitOfWorkDefinition (Program) (Enabled: Yes)
[15:43:03 DBG] From Program assemblies totally AppDefinitions found: 18
[15:43:04 DBG] Total AppDefinitions applied: 18
  • Появилсь возможность не только включать/выключать определенные AppDefinitions, но и указывать нужно ли их экспортировать или нет. Обратите внимание, что по умолчанию Exported свойство задано как False, то есть, не экспортировать данный AppDefinition. Например, если регистрацию конечной точки (endpoint) WeatherForcast слелать через определение (AppDefinition), то экспорт мог бы выглядеть так:
public class WeatherForecastEndpoints : AppDefinition
{
    /// <summary>
    /// Enables or disables export definition as a content for module that can be exported.
    /// </summary>
    /// /// <remarks>Default values is <c>False</c></remarks>
    public override bool Exported => true;

    public override void ConfigureApplication(WebApplication app)
    {
        app.MapGet("/weatherforecast", WeatherGet)
            .ProducesProblem(401)
            .Produces<WeatherForecast[]>()
            .WithName("GetWeatherForecast")
            .WithTags("ModuleTwo")
            .WithOpenApi()
            .RequireAuthorization(policyNames: CookieAuthenticationDefaults.AuthenticationScheme + ",OpenIddict.Validation.AspNetCore");
    }

    // [FeatureGroupName("Weather")]
    private WeatherForecast[] WeatherGet([FromServices] ILogger<WeatherForecastEndpoints> logger)
    {
        var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
        var forecast = Enumerable.Range(1, 5).Select(index =>
                new WeatherForecast
                (
                    DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                    Random.Shared.Next(-20, 55),
                    summaries[Random.Shared.Next(summaries.Length)]
                ))
            .ToArray();
        logger.LogInformation("WeatherForecast request execute at [{Time}].", DateTime.UtcNow);
        return forecast;
    }
}

v2.0.0

06 Aug 08:58

Choose a tag to compare

Версия 2.0.0

  • Больше не требуется вливать зависимость IServiceCollection в метод ConfigureServices. Теперь достаточно только WebApplicationBuilder. Следовательно при переходе на версию 2.0.0 нужно просто удалить лишние зависимости. Например, регистрация FluentValidation это выглядит так:
/// <summary>
/// FluentValidation registration as Application definition
/// </summary>
public class FluentValidationDefinition : AppDefinition
{
    /// <summary>
    /// Configure services for current application
    /// </summary>
    /// <param name="builder"></param>
    public override void ConfigureServices(WebApplicationBuilder builder)
    {
        builder.Services.Configure<ApiBehaviorOptions>(options =>
        {
            options.SuppressModelStateInvalidFilter = true;
        });

        builder.Services.AddValidatorsFromAssembly(typeof(Program).Assembly);
    }
}
  • Регистрация стала гораздо проще.
builder.AddDefinitions(typeof(Program));