Android Dagger обновляет значения вне модуля

Я использую dagger для DI в приложении для Android. Я могу предоставить переменные другим классам вне модулей, но как их обновить?

Пример: Логин

Мне нужен модуль AuthenticationModule, который может предоставить пользователь. Когда приложение запускается, пользователь не вошел в систему, поэтому он является нулевым. Но после успешной аутентификации LoginActivity необходимо установить значение User, чтобы сделать его доступным через другие части приложения через AuthenticationModule.

Простая установка значений введенного поля не делает работу за меня.

Это вообще возможно?

2 ответа

Решение

У меня была проблема с симилларом, и я сделал что-то вроде этого:

обертка:

class LoggedUserProvider {
    private User user;
    User getLoggedUser() {
        return user;
    }
    void setLoggedUser(User user) {
        this.user = user;
    }
}

модуль:

@Module(injects = Endpoint.class)
public class AuthenticationModule {
    @Provides
    @Singleton
    LoggedUserProvider provideLoggedUserProvider() {
        return new LoggedUserProvider();
    }
}

После этого вы можете использовать @Inject LoggedUserProvider и просто используйте getter / setter, чтобы указать, какой пользователь вошел в систему.

ИЛИ ЖЕ

Если вы хотите сделать это без оболочки, я думаю, вам нужно сделать этот модуль:

@Module(injects = Endpoint.class)
public class AuthenticationModule {
    @Provides
    User provideUser() {
        return null;
    }
}

и это, но не включать это до авторизации:

@Module(overrides = true)
public class CurrentUserModule {
    User currentUser;
    public CurrentUserModule(User currentUser) {
        this.currentUser = currentUser;
    }

    @Provides
    @Singleton
    User provideUser() {
        return currentUser;
    }
}

затем, после авторизации, добавьте этот модуль в objectGraph (передавая зарегистрированного пользователя в конструктор) и воссоздайте весь граф.
Это просто идея, я никогда не делал это таким образом.

Повторно присваивая сам объект User снова и снова, ObjectGraph не может передавать вновь назначенный объект другим классам.

Я решил проблему, реализовав AuthenticationHandler который содержит пользовательский объект. Таким образом, есть только один объект, который внедряется, который реализует такие методы, как setCurrentUser()

Другие вопросы по тегам