我在我的项目中使用了Dagger2发布的库。我已经定义AppComponent为:如何在Dagger2.11中注入IntentService
@Singleton
@Component(modules = {
AndroidInjectionModule.class, AppModule.class, ActivityBuilder.class })
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
void inject(TraderApplication traderApplication);
}
然后ActivityBuilder将确定具体的活动及相关模块为:
@Module
public abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = SplashActivityModule.class)
abstract SplashActivity bindSplashActivity();
}
和SplashActivityModule是提供依赖关系:
@Module
public class SplashActivityModule {
@Provides
SplashViewModel provideLoginViewModel(TraderRepository traderRepository, Application application, SharedPreferenceUtils sharedPreferenceUtils, AppExecutors appExecutors) {
return new SplashViewModel(traderRepository, application, sharedPreferenceUtils, appExecutors);
}
}
现在,我打电话一个来自SplashActivity的IntentService(用于加载一些设置数据),但在IntentService中,我无法处理@Inject SharePreference,AppExecuters等的依赖关系.AppM odule被定义为:
@Module
public class AppModule {
@Provides
@Singleton
TraderRepository provideIssueRepository(TraderListRepositoryImpl repository) {
return repository;
}
@Provides
@Singleton
SharedPreferences providesSharedPreferences(Application application) {
return PreferenceManager.getDefaultSharedPreferences(application);
}
}
** Update_1: 和内部SetupDataService我试图注入喜欢里面的onCreate:
public class SetupDataService extends IntentService implements HasServiceInjector {
@Inject
SharedPreferenceUtils mSharedPreferenceUtils;
@Inject
AndroidInjector<Service> fragmentDispatchingAndroidInjector;
@Override
public AndroidInjector<Service> serviceInjector() {
return fragmentDispatchingAndroidInjector;
}
@Override
public void onCreate() {
AndroidInjection.inject(this);
super.onCreate();
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
assert intent != null;
//**update_2 :
if(mSharedPreferenceUtils != null) //still null here after using @binds
{
}
}
}
它不允许我们注入,即使我试着在Application Class中实现HasServiceInjector。它抛出: '不能注入服务没有@Provide或@Produce'。
** Update_1到此为止..
如何使用Dagger2.11释放注入意向的服务。我试图定义:
void inject(IntentService intentService);
里面的AppComponent,但仍然,我注入依赖项时获得NULL值。
** Update_2:
和SharedPreferenceUtils类我试图在服务类注入内onHandleIntent返回null:
@Singleton
public class SharedPreferenceUtils {
//region Private Fields
private SharedPreferences mSharedPreferences;
private final String TAG = SharedPreferenceUtils.class.getSimpleName();
private final Method APPLY_METHOD = findApplyMethod();
//endregion
@Inject
public SharedPreferenceUtils(SharedPreferences mSharedPreferences) {
this.mSharedPreferences = mSharedPreferences;
}
}
** Update_2到此为止..
任何帮助这里..
谢谢。
,你能否告诉我们IntentService?凡在这对你们所说的'inject'方法,你向我们展示了,和你有没有考虑[使用'@ ContributesAndroidInjector'注入服务(https://github.com/google/dagger/blob/master/java/dagger /android/AndroidInjection.java#L127)? –
@JeffBowman请检查* Update_1编辑。谢谢。 – prdp89