tutorial para inyección español dependencias con android dependency-injection dagger object-graph

para - Android Dagger actualizando valores fuera del módulo



dagger 2 tutorial español (2)

Estoy usando dagger para DI en una aplicación de Android. Puedo proporcionar variables a otras clases fuera de los módulos, pero ¿cómo actualizarlos?

Ejemplo: Iniciar sesión

Necesito un AuthenticationModule que pueda proporcionar un usuario . Cuando se inicia la aplicación, el usuario no está conectado, por lo que es nulo. Pero después de una autenticación exitosa, LoginActivity necesita establecer el valor del usuario para hacer que sea accesible a través de otras partes de la aplicación a través de AuthenticationModule.

Simplemente establecer los valores del campo inyectado no hace el trabajo por mí.

¿Es posible?


Al volver a asignar el objeto de usuario una y otra vez, ObjectGraph no puede pasar el objeto recién asignado a otras clases.

Resolví el problema implementando un AuthenticationHandler que contiene el userobject. Entonces, solo se inyecta un Objeto que implementa métodos como setCurrentUser()


Tuve un problema similar y he hecho algo como esto:

envoltura:

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

módulo:

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

Después de eso, puede usar @Inject LoggedUserProvider y simplemente usar getter / setter para establecer qué usuario está actualmente conectado.

O

Si quieres hacer esto sin wrapper, supongo que necesitarías hacer este módulo:

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

y esto, pero no incluir esto antes de la autorización:

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

luego, después de la autorización, agregue este módulo a objectGraph (pasando el usuario registrado al constructor) y recree todo el gráfico.
Es solo una idea, nunca lo hice de esta manera.