Найти в Дзене
Dolgo.Polo Dev Android

Dependency Injection на пальцах (DI, Dagger, Hilt, Koin)

Долго боялся лезть разбираться в том, что же такое внедрение зависимостей. Но оказалось все очень просто - все библиотеки делают одно и то же:

Выносят создание класса в отдельный файл

Если раньше вы писали: SomeManager variable = new SomeManager();

прямо там, где вам нужен был этот менеджер, то теперь будете писать: @Inject SomeManager variable;

а для создания класса SomeManager напишите одну функцию, которая будет вызываться автоматически:

SomeManager provide() { return new SomeManager(); }

Зачем?

1. Чтобы заменив в одном месте параметры создания класса, сразу заменить их везде

2. Чтобы каждый раз не писать new SomeManager(), достаточно аннотации

3. Чтобы легко заменить класс SomeManager на SomeManager2, внеся изменения только в одном месте

4. Чтобы легче было отслеживать жизненный цикл этого объекта (большинство библиотек умеют создавать\уничтожать объект самостоятельно, привязываясь к жизненному циклу класса, в который был инъецирован объект)

5. Чтобы управлять количеством созданных копий. Например, если SomeManager используется в десяти разных местах одной активити, то можно с помощью одной аннотации указать, что во всех этих местах должен использоваться один и тот же экземпляр SomeManager, а не создаваться новые. А вот в другой активити уже будет создан независимый экземпляр SomeManager. И вам не придется следить за этим самостоятельно

какие еще плюшки от DI можно получить и какие минусы он тащит за собой?

обсуждение — t.me/dolgo_polo_dev/18