google compiler annotationprocessor android service dependency-injection inversion-of-control dagger-2

android - compiler - Usando Daga 2 para inyectar en servicio.



dagger android processor (2)

Escribí el código desde la parte superior de mi cabeza, por lo que podría haber un error tipográfico o dos.

Lo haces igual que cuando inyectas cosas en actividades.

  1. Declarar un componente,
  2. añadir el método de inyección a ese componente,
  3. agrega un modulo que provee tu servicio
  4. crear ese generador de componentes
  5. agrega tu modulo al constructor
  6. inyecte su servicio con el componente

El módulo y el componente se verían de esta forma (quizás añada algo de alcance)

@Module class ServiceModule { MyService mService; ServiceModule(MyService service) { mService = service; } @Provides MyService provideMyService() { return mService; } } @Component(modules=ServiceModule.class) interface MyServiceComponent { void inject(MyService service); }

Luego, en onCreate simplemente cree su componente e inyecte su alarma.

@Inject private SomeAlarm alarm; public void onCreate() { DaggerMyServiceComponent.builder() .serviceModule(new ServiceModule(this)) .build() .inject(this); alarm.doStuff(); }

Esto es asumiendo que su alarma puede ser inyectada por un constructor al tener un constructor anotado @Inject como este:

class SomeAlarm { @Inject SomeAlarm(MyService service) { /*constructor stuff*/ } }

Si no, también añadiría la creación de alarma a su módulo.

Tengo una aplicación que es básicamente un servicio que se ejecuta todo el tiempo y alarma al usuario cuando sucede algo.

Cuando el servicio crea la alarma, necesita darle su context para que la alarma pueda hacer devoluciones de llamada al servicio cuando algo sucede.

Por ejemplo:

public MyService extends Service{ private SomeAlarm alarm; @Override public void onCreate() { super.onCreate(); alarm = new SomeAlarm(MyService.this); } }

¿Cómo puedo inyectar la clase SomeAlarm en el servicio y darle a SomeAlarm el contexto del servicio como una variable?


Tenía un problema similar, Resultó que estaba llamando a Builder () (B mayúscula) El correcto debería ser builder (b minúscula)