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

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

Проект, созданный в 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 инкапсулирует большую часть действий по созданию сервиса бизнес-логики, настройке контейнера внедрения зависимостей, конвейера обработки запросов и настройке приложения для работы в составе Платформы.

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

    При запуске сервиса указывается класс 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-сервера с помощью метода 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();
    }