Что такое dependency injection · C# Backend — JobPilot

Что такое dependency injection

C# Backend · 37%
Вопрос 3368 / #
Пример ответа

Коротко: Dependency Injection (DI) — это паттерн проектирования, который я активно применяю в C# для управления зависимостями между компонентами, позволяя внедрять зависимости извне, а не создавать их внутри классов.

Ключевые идеи:
  • DI отделяет создание объектов от их использования, что повышает тестируемость и гибкость кода
  • В C# я использую встроенный контейнер внедрения зависимостей в ASP.NET Core для регистрации и разрешения сервисов
  • Этот подход упрощает поддержку кода, так как зависимости можно легко заменять, например, на моки при юнит-тестировании
Пример: Например, в ASP.NET Core я регистрирую сервис в Startup.cs через services.AddScoped<IMyService, MyService>(), а затем внедряю его в контроллер через конструктор, что позволяет легко тестировать и изменять реализацию.
Пример внедрения зависимости через конструктор в C# с использованием ASP.NET Core
csharp
public interface IMyService
{
    string GetData();
}

public class MyService : IMyService
{
    public string GetData() => "Data from service";
}

public class MyController : ControllerBase
{
    private readonly IMyService _myService;

    public MyController(IMyService myService)
    {
        _myService = myService;
    }

    [HttpGet]
    public IActionResult Get()
    {
        var data = _myService.GetData();
        return Ok(data);
    }
}

// В Startup.cs или Program.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IMyService, MyService>();
    services.AddControllers();
}
Вопросы для интервьюера:
  • Какие типы жизненного цикла зависимостей вы используете в C#?Я применяю AddSingleton, AddScoped и AddTransient в зависимости от необходимости глобального, контекстного или нового экземпляра на каждый запрос.
  • Как вы тестируете код с внедрёнными зависимостями?Использую моки или заглушки через библиотеки вроде Moq, чтобы изолировать тестируемый компонент и проверить его логику без реальных зависимостей.
Практический совет (на неделю):
  1. Начните с регистрации всех сервисов через интерфейсы в контейнере DI для улучшения тестируемости
  2. Избегайте сервис-локатора и предпочитайте внедрение через конструктор, чтобы зависимости были явными и управляемыми

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.