number last implement google daggerfragment compiler avion annotationprocessor android dagger-2

android - last - Generando un MembersInjector para[Class]. Prefiere ejecutar el procesador de dagas sobre esa clase



daggerfragment (2)

Tengo estas advertencias y no entiendo lo que significan. ¿Alguien puede señalarme algo?

Para las clases que inyecto en (donde hay una instrucción component.inject(this) )

Note: Generating a MembersInjector for [class] Prefer to run the dagger processor over that class instead.

Para el objeto que estoy inyectando ( @Inject anotado con @Inject )

Note: Generating a Provider for [class]. Prefer to run the dagger processor over that class instead.


Cuando se ejecuta el procesador de anotaciones de Dagger, genera dos tipos de clases:

  1. Implementaciones de interfaces @Component
  2. MembersInjector Provider y MembersInjector para cada tipo de @Inject ''d.

Mientras genera la implementación de la interfaz @Component , conecta cada una de las implementaciones de Provider y MembersInjector acuerdo con la forma en que se configuraron sus módulos. Si su componente o cualquiera de sus módulos se refieren a un tipo @Inject ''d que fue compilado sin el procesador Dagger, seguirá generando el Provider o MembersInjector , pero una vez para cada componente en lugar de una vez para la clase @Inject '' d.

Esto no es realmente un problema (por lo tanto, no es una advertencia o error), pero significa que potencialmente puede hacer que el procesador Dagger genere las mismas clases muchas veces para una sola aplicación. Podría ralentizar la compilación si y tomar un poco más de bytecode si realmente se sale de las manos.

La solución fácil es simplemente asegurarse de que está ejecutando el procesador de anotaciones Dagger cuando compila los tipos de @Inject ''d, así como sus componentes.


Recibí esta "Generating a MembersInjector for..." Daga 2 cuando tuve una superclase y una subclase de la siguiente manera ...

public abstract class BaseActivity extends Actvity { @Inject DependencyA dependencyA; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((MyApplication) getApplication()).getComponent().inject(this); } public class ConcreteActivity extends BaseActvity { @Inject DependencyB dependencyB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((MyApplication) getApplication()).getComponent().inject(this); } }

... y mi interfaz de Component tenía dos métodos de inyección de la siguiente manera ...

void inject(BaseActivity activity); void inject(ConcreteActivity activity);

inject(BaseActivity activity) método inject(BaseActivity activity) de mi interfaz de Component y BaseActivity la llamada al método Component.inject(this) de la clase BaseActivity . La inyección en BaseActivity sigue funcionando como se esperaba cuando la subclase ( ConcreteActivity ) llama a Component.inject(this) y no veo la "Generating a MembersInjector for..." Dagger 2 cuando "Generating a MembersInjector for..." la aplicación.