Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

472
Views
Dagger2 - Cómo usar @Named con @BindsInstance

¿Cómo se usa @Named con @BindsInstance? tengo este componente

 interface AppComponent : AndroidInjector<MyApplication>{ @Component.Builder abstract class Builder : AndroidInjector.Builder<MyApplication>() { @BindsInstance abstract fun preferenceName( @Named("PreferenceName") name : String ) : Builder } }

y tratando de inyectar en MyApplication

 @Inject @Named("PreferenceName") lateinit var prefName : String

Pero falla con MissingBinding for String. Podría resolver esto con un proveedor de módulos pero tratando de evitar el proveedor de constantes.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Actualización: Dagger 2.25.2 ha eliminado la necesidad de una solución alternativa:

  1. Soporte técnico de Kotlin

    ii. Las anotaciones de calificadores en los campos ahora se pueden entender sin necesidad de @field:MyQualifier (646e033)

    iii. Las clases de objetos @Module ya no necesitan @JvmStatic en los métodos proporcionados. (0da2180)


Esto no tiene nada que ver con @BindsInstance , sino con las anotaciones @Named en los campos. Puede saberlo por "MissingBinding for String", que de lo contrario le daría un error sobre una cadena con nombre.

Como en el artículo de Svetlozar Kostadinov Uso correcto de la anotación Dagger 2 @Named en Kotlin , deberá aclararle a Kotlin que desea que las anotaciones se apliquen al campo.

 @field:[Inject Named("PreferenceName")] lateinit var prefName : String;

Como dice Svetlozar:

La razón es que en Kotlin las anotaciones deben ser un poco más complicadas para que funcionen como se espera desde la perspectiva de Java. Eso proviene del hecho de que un elemento Kotlin puede ser una fachada de múltiples elementos Java emitidos en el código de bytes. Por ejemplo, una propiedad de Kotlin es una fachada de una variable miembro subyacente de Java, un getter y un setter. Anota la propiedad, pero lo que Dagger espera que se anote es el campo subyacente.

Relacionado: Inyección del constructor Dagger 2 en Kotlin con argumentos con nombre

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!