Play IT

Dependency Injection

Интерактивное демо «Dependency Injection» — раздел Энциклопедия · Код и разработка.

code-devencyclopedia

💉 Dependency Injection (DI)

DIP — "что": зависеть от абстракций. DI — "как": передавать зависимости извне (конструктор, setter, IoC).

DIP vs DI: принцип задаёт направление зависимостей, инъекция — механизм передачи реализации в класс.
👤 User
⚙️ UserServiceconstructor
📧 IEmailService
Сравнение способов
КритерийConstructorSetterFieldMethod
ОбязательностьОбязательнаяОпциональнаяНеочевиднаНа вызов
ИзменяемостьИммутабельнаяМутабельнаяМутабельнаяНе хранится
ТестируемостьЛегкоДоп. кодСложноЛегко
РекомендацияЛучшийОпциональные depsИзбегатьОдин вызов
Выбери тип инъекции и нажми "Зарегистрировать"
Код: Constructor
// Constructor Injection (рекомендуется)
class UserService {
  private final EmailService emailService;

  public UserService(EmailService emailService) {
    this.emailService = emailService;
  }
}

IEmailService регистрируется как singleton — один экземпляр на всё приложение.

// IoC-контейнер управляет жизненным циклом
container.register<IEmailService, SmtpEmailService>(Lifetime.Singleton);
container.register<UserService>();

var userService = container.resolve<UserService>();