Dagger语言 - android.app.IntentService with @Inject



是否可以将通过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();
   }
}

最新更新