Sobes.tech
Назад к вопросам
Junior — Middle
61

В каких местах или системах можно выполнить регистрацию сервиса?

Компании, где спрашивали
AndersenAndersen

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Регистрация сервиса обычно выполняется в контейнере зависимостей приложения, например в Startup или Program, а также в инфраструктурных модулях, которые собирают конфигурацию DI. Важно понимать, что регистрируется не сам объект, а правило его создания и время жизни. В некоторых случаях регистрация может происходить и вручную, но в современных C#-приложениях это реже.

Определение:

Регистрация сервиса — это добавление типа в контейнер зависимостей, чтобы приложение могло потом автоматически создавать и внедрять его в нужные классы. Обычно при регистрации указывают интерфейс, реализацию и жизненный цикл: transient, scoped или singleton.
Место регистрации зависит от архитектуры приложения: в ASP.NET Core — чаще всего в Program.cs или Startup.cs, в библиотечных проектах — в extension-методах для IServiceCollection, в тестах — в отдельной тестовой конфигурации контейнера.

Пример использования:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<ILoggerService, LoggerService>();
builder.Services.AddScoped<IOrderService, OrderService>();
builder.Services.AddTransient<INotificationService, NotificationService>();

var app = builder.Build();
app.Run();

Здесь сервисы регистрируются в Program.cs через builder.Services, после чего контейнер может внедрять их в контроллеры, middleware или другие сервисы.

Пояснение кода:

  • AddSingleton — один экземпляр на всё время жизни приложения.
  • AddScoped — один экземпляр на один scope, обычно на один HTTP-запрос.
  • AddTransient — новый экземпляр при каждом запросе из контейнера.
  • Регистрация в Program.cs удобна тем, что вся конфигурация DI находится в одном месте.
  • Если проект большой, часть регистраций часто выносят в отдельные методы расширения, чтобы не перегружать стартовый файл.

Ключевые моменты:

  • Основное место регистрации в C#-приложениях — контейнер зависимостей IServiceCollection.
  • Чаще всего это Program.cs или Startup.cs в ASP.NET Core.
  • Регистрацию можно выносить в extension-методы и отдельные модули инфраструктуры.
  • В тестах и отдельных сборках часто используется своя конфигурация DI.
  • Важно не только где зарегистрирован сервис, но и какой у него lifetime.