Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про C#: dependency, inversion, injection

Чем отличается Dependency Inversion от Dependency Injection?

Этот вопрос проверяет понимание разницы между архитектурным принципом и механизмом внедрения зависимостей.

Короткий ответ

Dependency Inversion — это принцип, который говорит, что модули высокого уровня не должны зависеть от конкретных реализаций. Они должны зависеть от абстракций. Dependency Injection — это способ реализовать этот принцип, передавая зависимости в конструктор, методы или свойства. DI — это техника, а DIP — фундаментальная архитектурная идея. DIP можно соблюдать и без DI-фреймворков, но DI помогает сделать это удобнее.

Длинный ответ

Dependency Inversion Principle (DIP)

Определение: Высокоуровневые модули не должны зависеть от низкоуровневых. Оба должны зависеть от абстракций.

Смысл — отвязать логику от конкретных классов, чтобы код был гибким.

Пример нарушения:

class EnemySpawner
{
    private Orc orc = new Orc(); // зависимость от конкретной реализации
}

Пример соблюдения:

class EnemySpawner
{
    private readonly IEnemy enemy;
    public EnemySpawner(IEnemy enemy) => this.enemy = enemy;
}

Dependency Injection (DI)

Определение: Техника передачи зависимостей объекту извне — через конструктор, метод или свойство.

Ди вводит зависимости, а не создаёт их внутри.

Пример DI:

var spawner = new EnemySpawner(new Orc());

Основные отличия

1. DIP — принцип, DI — механизм

  • DIP описывает, как правильно проектировать архитектуру

  • DI описывает, как подавать зависимости в классы

2. DIP работает всегда, DI — опционален

DIP можно соблюдать даже без DI-контейнеров.

3. DI-контейнер не является необходимостью

Можно вручную внедрять зависимости через конструктор.

Краткий вывод

Используй DIP для построения гибкой архитектуры, а DI — как удобный инструмент соблюдения DIP.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • C#

    C#

Ключевые слова

#dependency

#inversion

#injection

Подпишись на Game Developer в телеграм