J'ai une application qui est fondamentalement un service qui fonctionne tout le temps et qui alerte l'utilisateur lorsque quelque chose se passe.
Lorsque le service crée l'alarme, il doit lui donner son context
pour que l'alarme puisse faire rappels au service quand quelque chose se passe.
Par exemple:
public MyService extends Service{
private SomeAlarm alarm;
@Override
public void onCreate() {
super.onCreate();
alarm = new SomeAlarm(MyService.this);
}
}
Comment puis-je injecter la classe SomeAlarm
dans le service et donner au SomeAlarm
le contexte du service en tant que variable?
J'ai écrit le code du haut de ma tête, donc il pourrait y avoir une faute de frappe ou deux.
Vous le faites de la même manière que lorsque vous injectez des choses dans des activités.
Votre module et composant ressemblerait à ceci (peut-être ajouter une portée)
@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);
}
Puis dans onCreate
créez simplement votre composant et injectez votre alarme.
@Inject
private SomeAlarm alarm;
public void onCreate() {
DaggerMyServiceComponent.builder()
.serviceModule(new ServiceModule(this))
.build()
.inject(this);
alarm.doStuff();
}
Cela suppose que votre alarme peut être injectée par le constructeur en ayant un @Inject
constructeur annoté comme ceci:
class SomeAlarm {
@Inject
SomeAlarm(MyService service) {
/*constructor stuff*/
}
}
Sinon, vous ajouteriez simplement la création d'alarme à votre module.