Перейти к основному содержимому

Структура проекта для разработки сервиса бизнес-логики

Проект, созданный в Visual Studio на основе шаблона, содержит следующие папки и файлы (см. рисунок ниже):

  • Program.cs: файл с описанием стартового класса, в котором можно настроить параметры и поведение сервиса, указать название, версию, версию конфигурации и API сервиса.
  • Startup.cs: файл с описанием класса, в котором можно настроить контейнер внедрения зависимостей и конвейер обработки запросов.
  • Controllers: папка с описанием классов контроллеров API сервиса и с файлом примера контроллера.
  • Models: папка с описанием классов моделей API.
  • Models/Constants.cs: файл с описанием класса с константами.
  • Models/HelloApiResult.cs: пример класса для возврата результата из метода API сервиса.
  • appsettings.json, appsettings.Development.json: файлы конфигурации сервиса.
UG_service_template_structure.png
Структура проекта в Visual Studio

Классы в файле Program.cs

В файле Program.cs описаны следующие классы:

  • Статический класс PlatformService инкапсулирует большую часть действий по созданию сервиса бизнес-логики, настройке контейнера внедрения зависимостей, конвейера обработки запросов и настройке приложения для работы в составе Платформы. Класс PlatformService находится в пакете NuGet ASE.MD.Platform.Utils.ServiceBase.

    Метод Start класса PlatformService создает и запускает сервис бизнес-логики. В качестве параметра методу Start передается экземпляр класса StartParameters, который управляет поведением сервиса бизнес-логики.

    Следующий блок кода демонстрирует пример содержимого файла Program.cs.

    namespace ApiServiceSPOTemplate
    {
    public class Program

    {
    /// <summary>
    /// Точка запуска сервиса
    /// </summary>
    /// <param name="args"></param>
    /// <returns></returns>
    public static async Task Main(string[] args)
    {
    //параметры запуска сервиса
    StartParameters parameters = new StartParameters()...

    await PlatformService.Start<Startup>(parameters, args);
    }
    }
    }

    При запуске сервиса бизнес-логики указывается класс Startup, с помощью которого можно дополнительно конфигурировать контейнер внедрения зависимостей и конвейер обработки запросов.

  • Класс StartParameters имеет свойства для описания поведения сервиса бизнес-логики (см. следующую таблицу).

Свойства класса StartParameters

СвойствоТип данныхЗначение по умолчаниюОписание
SwaggerTittlestringnullЗаголовок описания API в генерируемом файле swagger
SwaggerDescriptionstringnullОписания API в генерируемом файле swagger
ServiceSubPathstring-SubPath, который используется для обращения к API сервиса
UseIdentityAuthenticationboolfalseПризнак активации аутентификации и авторизации для методов API
UseDiscoveryRegistrationbooltrueПризнак регистрации сервиса в сервисе Discovery. Не рекомендуется изменять значение по умолчанию
NeedTranslateExceptionToResultbool-Необработанные исключения в методах API middleware автоматически транслируются в ответ с признаком и описанием ошибки
ServiceNamestringnullНазвание сервиса. Если свойство имеет значение null, название сервиса извлекается из DiscoveryAttribute
ServiceVersionstringnullВерсия сервиса. Если свойство имеет значение null, версия сервиса извлекается из DiscoveryAttribute
ConfigVersionstringnullВерсия конфигурации сервиса. Если свойство имеет значение null, версия сервиса извлекается из DiscoveryAttribute
ApiVersionstringnullВерсия API сервиса
DbVersionstringnullВерсия БД сервиса
AdditionalConfigurationFilesNamesList<string>new List<string>()Список названий дополнительных файлов конфигураций. Эти файлы должны располагаться на том же уровне, что и appsettings.json
CustomCofigurationLoaderAction<IDictionary<string, string>, IConfiguration>nullЗагрузка конфигурации из произвольного источника. Если этот загрузчик задан, он вызывается последним. Все исключения в этом методе будут игнорироваться, не влияя на запуск сервиса
AdditionalEndpointsList<SystemInfo>new List<SystemInfo>()Дополнительные конечные точки, регистрируемые в API System

Класс в файле Startup.cs

В файле Startup.cs описан класс Startup, который передается методу Start класса PlatformService и позволяет конфигурировать следующие сущности:

  • Контейнер внедрения зависимостей.

    Для помещения сервиса в контейнер внедрения зависимостей используется метод ConfigureServices. Реализация класса PlatformService помещает в контейнер сервисы, которые необходимы для работы сервиса бизнес-логики. Если логика работы приложения требует дополнительных сервисов, эти сервисы также можно добавить с помощью метода ConfigureServices.

    Следующий блок кода демонстрирует добавление контекста EntityFramework и GraphQL-сервера HotChocolate с помощью метода ConfigureServices.

    public void ConfigureServices(IServiceCollection services)
    {
    services.AddDbContext<MyContext>();
    services.AddGraphQL(
    SchemaBuilder
    .New()
    .AddQueryType<Query>()
    .Create()
    );
    }
  • Конвейер обработки запросов.

    Для конфигурирования конвейера обработки запросов используется метод Configure. Реализация класса PlatformService производит большую часть необходимых настроек. Конвейер обработки запросов можно дополненить и изменить с помощью метода Configure.

    Следующий блок кода демонстрирует дополнение конвейера обработки запросов с помощью метода Configure.

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    InitializeDatabase(app);
    app.UseGraphQL();
    }