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.
- Declarar un componente,
- añadir el método de inyección a ese componente,
- agrega un modulo que provee tu servicio
- crear ese generador de componentes
- agrega tu modulo al constructor
- 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)