es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Daga Hilt 2, Crear instancia de cualquier objeto e inyectándolo a una clase.

Estoy convirtiendo mi aplicación existente a la arquitectura MVVM, uso hilt dagger 2 para la inyección de dependencias. En mi código anterior, usé un único hilo Executor para ejecutar todas las tareas. Ahora, en el principal Módulo de Inyección de Dependencias, me gustaría crear una instancia de Executor y luego inyectarla en todas las clases. ¿Puede alguien revisar mi enfoque y decir si es bueno?

@Module
@InstallIn(SingletonComponent::class)
class AppModule {

    @Singleton
    @Provides
    fun getAppDb(context: Application) : AppDatabase {
        return AppDatabase.getInstance(context)
    }

    @Singleton
    @Provides
    fun getDao(appDb: AppDatabase) : StoragesDao {
        return appDb.storagesDao()
    }

    @Singleton
    @Provides
    fun getExecutor() : Executor {
        return Executors.newSingleThreadExecutor();
    }
}

Clase StorageRepository donde yo inject la instancia de executor.

class StorageRepository @Inject constructor(
    @ApplicationContext val context: Context,
    private val storageDao: StoragesDao,
    private val executor: Executor
    ) {

  //  private val executor: Executor = Executors.newSingleThreadExecutor()

    fun insertStorage(storagesEntity: StoragesEntity, listener: OnApiUpdateListener?) {
        executor.execute {
            storageDao.insertAll(storagesEntity)
            if (ApiUtils.isNetworkAvailable(context)) {
                post_Storage(storagesEntity, listener)
            } else {
                listener?.eventUpdate(context.getString(R.string.failure))
            }
        }
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Tu enfoque se ve bien. Estás proporcionando una sola instancia del Executor en AppModule, y luego lo inyectas como una dependencia en la clase StorageRepository. Esto asegurará que todas las tareas se ejecuten en el mismo hilo de manera de un sólo hilo, lo que puede ayudar a evitar problemas de concurrencia.

    Al usar Hilt para la inyección de dependencias, también estás siguiendo las mejores prácticas para la organización y mantenimiento de código. Esto te permite cambiar fácilmente las dependencias o modificar su comportamiento sin tener que modificar el código en todas partes.

    En general, tu enfoque parece estar en línea con la arquitectura MVVM y las mejores prácticas de inyección de dependencias.

Comments are closed.