Структура проекта для разработки сервиса бизнес-логики
Проект, созданный в Visual Studio на основе шаблона, содержит следующие папки и файлы (см. рисунок ниже):
Program.cs
: файл с описанием стартового класса, в котором можно настроить параметры и поведение сервиса, указать название, версию, версию конфигурации и API сервиса.Startup.cs
: файл с описанием класса, в котором можно настроить контейнер внедрения зависимостей и конвейер обработки запросов.Controllers
: папка с описанием классов контроллеров API сервиса и с файлом примера контроллера.Models
: папка с описанием классов моделей API.Models/Constants.cs
: файл с описанием класса с константами.Models/HelloApiResult.cs
: пример класса для возврата результата из метода API сервиса.appsettings.json
,appsettings.Development.json
: файлы конфигурации сервиса.
![]() |
---|
Структура проекта в 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
Свойство | Тип данных | Значение по умолчанию | Описание |
---|---|---|---|
SwaggerTittle | string | null | Заголовок описания API в генерируемом файле swagger |
SwaggerDescription | string | null | Описания API в генерируемом файле swagger |
ServiceSubPath | string | - | SubPath, который используется для обращения к API сервиса |
UseIdentityAuthentication | bool | false | Признак активации аутентификации и авторизации для методов API |
UseDiscoveryRegistration | bool | true | Признак регистрации сервиса в сервисе Discovery. Не рекомендуется изменять значение по умолчанию |
NeedTranslateExceptionToResult | bool | - | Необработанные исключения в методах API middleware автоматически транслируются в ответ с признаком и описанием ошибки |
ServiceName | string | null | Название сервиса. Если свойство имеет значение null, название сервиса извлекается из DiscoveryAttribute |
ServiceVersion | string | null | Версия сервиса. Если свойство имеет значение null, версия сервиса извлекается из DiscoveryAttribute |
ConfigVersion | string | null | Версия конфигурации сервиса. Если свойство имеет значение null, версия сервиса извлекается из DiscoveryAttribute |
ApiVersion | string | null | Версия API сервиса |
DbVersion | string | null | Версия БД сервиса |
AdditionalConfigurationFilesNames | List<string> | new List<string>() | Список названий дополнительных файлов конфигураций. Эти файлы должны располагаться на том же уровне, что и appsettings.json |
CustomCofigurationLoader | Action<IDictionary<string, string>, IConfiguration> | null | Загрузка конфигурации из произвольного источника. Если этот загрузчик задан, он вызывается последним. Все исключения в этом методе будут игнорироваться, не влияя на запуск сервиса |
AdditionalEndpoints | List<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();
}