-
Notifications
You must be signed in to change notification settings - Fork 0
Docs (RU)
Pavel Roslyakov edited this page Nov 30, 2024
·
14 revisions
- Для удобного использования советую сразу в проект устанавливать все 3 библиотеки, т.к. каждая из них может пригодиться в той или иной степени.
- Перед добавлением библиотек советую удалить автоматически добавляемый NuGet "Swashbuckle.AspNetCore" в проекте "ASP .NET 8 Web API", т.к. данный NuGet пакет содержится в "AspNetCoreMicroserviceInitializer.TradingDesk".
- Для настройки микросервиса (его серверной части) и добавления модулей из библиотеки используется новый класс - WebApplicationFacade, который служит "оберткой" для WebApplication и WebApplicationBuilder и позволяет гибко настроить желаемые модули.
public class Program
{
public static void Main(string[] args)
{
var modules = new List<WebApplicationModules>
{
WebApplicationModules.Database,
WebApplicationModules.Settings,
WebApplicationModules.Services,
WebApplicationModules.Serilog,
WebApplicationModules.HealthChecks
};
var dockerComposeModules = new List<DockerComposeFileModules>
{
DockerComposeFileModules.Server,
DockerComposeFileModules.PostgreSql,
DockerComposeFileModules.Adminer
};
var app = new WebApplicationFacade(modules)
.InitBaseConfig()
.InitBaseDockerComposeFiles(dockerComposeModules)
.AddAdditionalModules(builder =>
{
builder.Services.AddGrpc();
builder.Services.AddScoped<ICatsFactRepository, CatsFactRepository>();
})
.CreateApplication();
app.MapGrpcServices();
app.Run();
}
}- Все модули, которые можно добавить в микросервис с помощью библиотек, а так же условия их добавления ("summary" и "remarks") описаны ниже:
/// <summary>
/// Модули веб-приложения.
/// </summary>
public enum WebApplicationModules
{
/// <summary>
/// Модуль для автоматической регистрации настроек конфига.
///
/// Для корректной работы данного модуля необходимо:
/// 1. Добавить в приложение модель настроек конфига.
/// 2. Создать в конфиге элемент модели настроек (название класса и название элемента конфига должны совпадать).
/// 3. Присвоить моделям настроек атрибут <see cref="AutoRegisterConfigSettingsAttribute"/>.
/// </summary>
/// <remarks>Регистрация моделей будет произведена автоматически, используя атрибут <see cref="AutoRegisterConfigSettingsAttribute"/>.</remarks>
Settings = 0,
/// <summary>
/// Модуль для автоматической регистрации сервисов.
///
/// Для корректной работы данного модуля необходимо:
/// 1. Создать сервис и присвоить ему атрибут <see cref="AutoRegisterServiceAttribute"/>.
/// </summary>
/// <remarks>
/// При необходимости добавления фабричной функции во время регистрации сервиса, необходимо унаследовать созданный сервис от <see cref="ServiceBase"/>,
/// и переопределить в созданном сервисе метод <see cref="ServiceBase.ImplementationFactory"/>.
/// необходимо
/// </remarks>
Services = 1,
/// <summary>
/// Модуль добавления в приложение модуля для работы с Sql базами данных.
///
/// Для корректной работы данного модуля необходимо:
/// 1. Создать модели <see cref="DbContext"/>.
/// 2. Создать репозитории для работы с <see cref="DbContext"/>.
/// 3. Присвоить моделям <see cref="DbContext"/> атрибут <see cref="AutoRegisterDbContextAttribute"/>.
/// 4. Присвоить моделям репозиториев <see cref="AutoRegisterRepositoryAttribute"/>.
/// </summary>
/// <remarks>Регистрация моделей будет произведена автоматически, используя атрибуты <see cref="AutoRegisterDbContextAttribute"/> и <see cref="AutoRegisterRepositoryAttribute"/> (регистрация репозиториев производится как AddScoped).</remarks>
SqlDatabase = 2,
/// <summary>
/// Модуль для автоматической регистрации HealthChecks.
///
/// Для корректной работы данного модуля необходимо:
/// 1. Добавить в приложение классы HealthChecks, унаследованные от <see cref="IHealthCheck"/> и присвоить им атрибут <see cref="AutoRegisterHealthCheckAttribute"/>.
/// 2. Создать в конфиге элемент модели настроек Health Checks <see cref="HealthChecksSettings"/>.
/// </summary>
/// <remarks>1. Регистрация моделей будет произведена автоматически, используя реализацию интерфейса <see cref="IHealthCheck"/> и атрибут <see cref="AutoRegisterHealthCheckAttribute"/>.
/// 2. Если в настройках конфига включен параметр <see cref="HealthChecksSettings.UIEnable"/>, то получить доступ к UI оболочке можно по URL: /healthchecks-ui</remarks>
HealthChecks = 3,
/// <summary>
/// Модуль автоматической регистрации <see cref="AutoMapper"/>.
///
/// Для корректной работы данного модуля необходимо:
/// 1. Создать базовую модель.
/// 2. Создать модель DTO.
/// 3. Создать профиль, унаследованный от <see cref="Profile"/> для маппинга моделей.
/// 4. Присвоить модели DTO атрибут <see cref="AutoRegisterProfileAttribute"/> и передать в его параметры необходимые типы моделей.
/// </summary>
/// <remarks>Регистрация моделей будет произведена автоматически, используя атрибут <see cref="AutoRegisterProfileAttribute"/>.</remarks>
AutoMappers = 4,
/// <summary>
/// Модуль автоматической регистрации политики Cors.
///
/// Для корректной работы данного модуля необходимо:
/// 1. Создать в конфиге элемент модели настроек <see cref="CorsSettings"/>.
/// </summary>
Cors = 5,
/// <summary>
/// Модуль для работы с фоновыми задачами Hangfire.
///
/// Для корректной работы данного модуля необходимо:
/// 1. Создать фоновые задачи, реализующие интерфейс <see cref="IHangfireBackgroundTask"/>.
/// 2. Создать в конфиге элементы моделей настроек задач, которые должны быть унаследованны от <see cref="HangfireTaskSettingsBase"/> для каждой задачи.
/// 3. Создать в конфиге элемент модели настроек Hangfire <see cref="HangfireSettings"/>.
/// 4. Создать в конфиге элемент модели настроек дашборда Hangfire <see cref="HangfireDashboardSettings"/>.
/// 5. При необходимости создать фильтр авторизации для дашборда Hangfire, унаследованный от <see cref="IDashboardAuthorizationFilter"/> или же использовать существующие фильтры (<see cref="AllAuthorizationFilter"/>).
/// 6. Присвоить задачам атрибут <see cref="AutoRegisterHangfireTaskAttribute"/> и передать в его параметры необходимый типы модели настроек.
/// </summary>
/// <remarks>Регистрация моделей будет произведена автоматически, используя атрибут <see cref="AutoRegisterHangfireTaskAttribute"/>.</remarks>
Hangfire = 6,
/// <summary>
/// Модуль Swagger.
/// </summary>
Swagger = 7,
/// <summary>
/// Модуль Serilog.
///
/// Настроить модуль можно в конфиге appsettings.json. Базовый конфиг для настроек Serilog можно проинициализировать, используя метод .InitBaseConfig() у WebApplicationFacade.
/// Обратиться к логгеру можно как используя интерфейс <see cref="ILogger{TCategoryName}"/>, так и используя статический класс <see cref="Serilog.Log"/>.
/// </summary>
Serilog = 8,
/// <summary>
/// Модуль переменных окружения.
/// </summary>
EnvironmentVariables = 9,
/// <summary>
/// Модуль конфигурации ApiExplorer (служба Minimal APIs).
/// </summary>
EndpointsApiExplorer = 10,
/// <summary>
/// Модуль инициализации мигратора <see cref="Migrator"/> (применяет созданные миграции к БД) и проведения миграций при старте приложения с использованием <see cref="MigrationHostedService"/>.
///
/// Для корректной работы мигратора необходимо:
/// 1. Создать модели <see cref="DbContext"/>.
/// 2. Присвоить моделям <see cref="DbContext"/> атрибут <see cref="AutoRegisterDbContextAttribute"/>.
/// 3. Создать миграции, используя команду <code>dotnet ef migrations add InitialCreate --project your-project/your-project.csproj --startup-project your-project/your-project.csproj --output-dir Migrations</code>.
/// </summary>
EFMigrations = 11,
/// <summary>
/// Модуль контроллеров.
/// </summary>
Controllers = 12,
/// <summary>
/// Модуль базы данных MongoDb.
///
/// Для корректной работы модуля необходимо:
/// 1. Создать модели репозиториев, унаследованных от MongoRepositoryBase.cs
/// 2. Создать модели настроек для каждого репозитория. Модели необходимо унаследовать от <see cref="MongoSettingsBase"/> и присвоить им атрибут <see cref="AutoRegisterConfigSettingsAttribute"/>.
/// 3. Создать автоматически или заполнить вручную модели настроек MongoDb в файле appsettings.json.
/// </summary>
MongoDatabase = 13,
/// <summary>
/// Модуль базы данных Redis.
///
/// 1. Создать модели репозиториев, унаследованных от RedisRepositoryBase.cs
/// 2. Создать модели настроек для каждого репозитория. Модели необходимо унаследовать от <see cref="RedisSettingsBase"/> и присвоить им атрибут <see cref="AutoRegisterConfigSettingsAttribute"/>.
/// 3. Создать автоматически или заполнить вручную модели настроек Redis в файле appsettings.json.
/// </summary>
RedisDatabase = 14
}- Конкретные примеры использования модулей можно посмотреть в проекте AspNetCoreMicroserviceInitializer.Examples. Данный проект делался просто для тестов модулей, поэтому о "красоте кода" в нем я не задумывался. Как будет дописан мой MVP-проект с 3-мя микросервисами, которые используют эту библиотеку, то обновлю документацию и приложу здесь на него ссылку, т.к. там код намного чище и красивей.
Repository with the basic Onion-Architecture-Microservice template:
All NuGet packages:
- AspNetCoreMicroserviceInitializer.Registrations
- AspNetCoreMicroserviceInitializer.TradingDesk
- AspNetCoreMicroserviceInitializer.Database
My contacts (if you have any questions):