Пример ответа
Коротко: 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, чтобы изолировать тестируемый компонент и проверить его логику без реальных зависимостей.
Практический совет (на неделю):
- Начните с регистрации всех сервисов через интерфейсы в контейнере DI для улучшения тестируемости
- Избегайте сервис-локатора и предпочитайте внедрение через конструктор, чтобы зависимости были явными и управляемыми
C# Backend
Общий
37%