Sobes.tech
Middle
135
questionbank

Для чего используются методы конфигурации сервисов в C#?

Answer from AI

sobes.tech AI

Для регистрации зависимостей в контейнере внедрения зависимостей (Dependency Injection container). Это позволяет инфраструктуре приложения управлять созданием экземпляров сервисов и внедрять их туда, где они необходимы.

Основные цели:

  • Управление жизненным циклом: Определение времени существования экземпляра сервиса (Singleton, Scoped, Transient).
  • Деcoupled Architecture: Уменьшение связанности между компонентами за счет использования абстракций (интерфейсов).
  • Тестируемость: Легкая замена реализаций сервисов для модульного тестирования.
  • Конфигуративность: Возможность замены одной реализации другой без изменения клиентского кода.

Пример регистрации сервисов в ASP.NET Core:

// Startup.cs или Program.cs в Minimal APIs
public void ConfigureServices(IServiceCollection services)
{
    // Регистрация сервиса с жизненным циклом Singleton
    services.AddSingleton<ISingletonService, SingletonService>();

    // Регистрация сервиса с жизненным циклом Scoped
    services.AddScoped<IScopedService, ScopedService>();

    // Регистрация сервиса с жизненным циклом Transient
    services.AddTransient<ITransientService, TransientService>();

    // Регистрация MVC и других стандартных сервисов
    services.AddControllersWithViews();
}

Жизненные циклы сервисов:

Жизненный цикл Описание Экземпляры в рамках одного запроса (HTTP)
Singleton Один экземпляр на всё время жизни приложения. Один
Scoped Один экземпляр на время жизни запроса (в HTTP-контексте). Один
Transient Новый экземпляр создается при каждом запросе сервиса. Несколько (при каждом внедрении)