¿Es posible inyectar en campo un adaptador de vista de reciclador con Dagger 2.11

He estado usando las nuevas dagger.android inyección dagger.android y hasta ahora realmente las he estado disfrutando.

Sin embargo, me encontré con este pequeño problema por el cual parece imposible insert en el campo un adaptador o básicamente cualquier class de no actividad que estoy usando.

Sé que sería más fácil @Inject the constructor pero dado que estoy pasando los datos a mi recyclerview a través del constructor, esta no es una opción para mí.

Esto significa que tengo que llamar al componente para inyectar mi class.

Con una class AppComponent que se ve así:

 interface AppComponent : AndroidInjector<App> { @Component.Builder abstract class Builder { abstract fun networkModule(networkModule: NetworkModule): Builder } fun inject(someClass SomeClass) } 

El DaggerAppComponent generado no reconoce un método .inject() después de decir DaggerAppComponent.builder().build()

Obviamente estoy malinterpretando algo sobre Dagger porque esta parece ser la manera canónica de inyectar una class.

Sospecho que es porque me estoy extendiendo desde AndroidInjector pero si este es el caso, ¿cómo inyectaría una class que no sea de actividad? Porque incluso si @Subcomponent un @Subcomponent de @Subcomponent para esa class, todavía tendría que ser llamado desde DaggerAppComponent

Es una cuestión de gusto (y un layout de código más perfecto), pero no creo que lo estés haciendo de la manera correcta.

¿A qué te refieres con "dado que paso los datos a mi vista del reciclador a través del constructor"? Usted asigna datos al Adaptador, no a la propia vista del reciclador.

Si no quiere (pero probablemente debería) usar el enfoque de MVP, el objective de cargar datos desde algún lugar y luego mostrarlo con RCV sería algo como esto:

 class TestFragment : Fragment() { val recyclerView: RecyclerView by bind(R.id.recyclerview) // Custom view binding but whatever val adapter: TestAdapter? = null override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater!!.inflate(R.layout.test, container, false) // Initialize recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) adapter = TestAdapter(mutableListOf()) recyclerView.adapter = adapter // Add data adapter.addItem(MyClass("Hey it's working")) return view } } 

En cuanto a la daga android, en realidad no la encuentro más útil que la daga normal. Hace las cosas aún más complicadas.

Recomiendo usar MVP para Android. Aquí hay una muestra mía, que elimina la necesidad de una actividad / componente para inyectar dependencies, siéntase libre de echar un vistazo a la muestra MVP

  • Modificar la plantilla de file de testing
  • no puede generar carpetas de vista java.lang.NullPointerException
  • ¿Existe una regla de protección válida para RxJava y FasterXML?
  • Valor de campo de sum de JOOQ: BigDecimal a Int
  • ¿Qué significa la palabra key header / impl en kotlin?
  • Sitio de Android: cada variable de enlace en la consulta debe tener un método de coincidencia
  • Reduce on Range throws NoClassDefFoundError: kotlin / IntIterator
  • Una buena forma de acceder a palabras mixtas de 8/16/32 bits
  • 'x' no es una function al pasar parameters en Kotlin Javascript
  • Kotlin: no puedo correr "hola mundo" en intellij
  • Crear una nueva instancia de una KClass