Middle
150
questionbank
Что такое внедрение зависимостей (DI) в ASP.NET Core?
Answer from AI
sobes.tech AI
Это шаблон проектирования, при котором объект или функция получают свои зависимости извне, а не создают их сами. В ASP.NET Core DI интегрирован в фреймворк и используется для управления жизненным циклом и связями между компонентами приложения.
Преимущества использования DI в ASP.NET Core:
- Тестируемость: Легче создавать mock-объекты и stub-объекты для тестирования зависимостей.
- Поддерживаемость: Упрощает модификацию и расширение функциональности приложения.
- Слабая связанность: Компоненты меньше зависят друг от друга.
ASP.NET Core предоставляет встроенный контейнер DI (IServiceProvider), который позволяет регистрировать и разрешать сервисы. Сервисы регистрируются в методе ConfigureServices класса Startup.
Пример регистрации сервиса с различными временами жизни:
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Сервис создается каждый раз при запросе
services.AddTransient<ITransientService, TransientService>();
// Сервис создается один раз при первом запросе и переиспользуется
services.AddScoped<IScopedService, ScopedService>();
// Сервис создается один раз за все время работы приложения
services.AddSingleton<ISingletonService, SingletonService>();
}
Пример использования зарегистрированного сервиса в контроллере:
// HomeController.cs
public class HomeController : Controller
{
private readonly ITransientService _transientService;
private readonly IScopedService _scopedService;
private readonly ISingletonService _singletonService;
// Зависимости внедряются через конструктор
public HomeController(ITransientService transientService, IScopedService scopedService, ISingletonService singletonService)
{
_transientService = transientService;
_scopedService = scopedService;
_singletonService = singletonService;
}
public IActionResult Index()
{
// Использование сервисов
var transientId = _transientService.GetId();
var scopedId = _scopedService.GetId();
var singletonId = _singletonService.GetId();
return View();
}
}
Типы времени жизни сервисов:
| Время жизни | Описание |
|---|---|
| Transient | Создается новый экземпляр сервиса при каждом запросе его разрешения. |
| Scoped | Создается один экземпляр сервиса на каждый входящий HTTP-запрос. |
| Singleton | Создается один экземпляр сервиса за все время работы приложения. |