是否可以将通过dagger暴露的对象注入android.app.IntentService?如果是,我该怎么做?
我想要那样的东西。
public class SomeService extends android.app.IntentService {
@Inject
Synchronizer synchronizer;
public SomeService(String name) {
super(name);
}
@Override
protected void onHandleIntent(Intent intent) {
synchronizer.doSynch();
}
}
从dagger的角度来看,IntentService
与任何其他类都没有什么不同。
然而,Dagger2.x提供了一种新的方式,即如何将依赖项注入Android的基本构建元素(如Service、Activities、Fragment等)。
dagger1.x
注入可能是这样的(我假设您的应用程序有一个ObjectGraph实例,并公开方法inject)。当然,不要忘记将类添加到Module定义中的注入类列表中。
public class SomeService extends android.app.IntentService {
@Inject
Synchronizer synchronizer;
public SomeService(String name) {
super(name);
}
@Override
public void onCreate() {
super.onCreate();
((YourApplication) getApplication()).inject(this);
}
@Override
protected void onHandleIntent(Intent intent) {
synchronizer.doSynch();
}
}
dagger2.10+
Dagger 2.10引入了AndroidInjection
,因此不需要进一步依赖于具体的应用程序实例。
public class SomeService extends android.app.IntentService {
@Inject
Synchronizer synchronizer;
public SomeService(String name) {
super(name);
}
@Override
public void onCreate() {
super.onCreate();
AndroidInjection.inject(this);
}
@Override
protected void onHandleIntent(Intent intent) {
synchronizer.doSynch();
}
}