[英]BroadcastReceiver in Android dagger 2.11
我試圖在Android中使用匕首注入廣播接收器。 我正在使用匕首2.11。 我有BroadcastReceiver模塊類,組件類,並且在Application類中實現了HasBroadcastReceiverInjector。 我是否必須在Application類中實現HasBroadcastReceiverInjector,或者可以在Activity類中實現HasBroadcastReceiverInjector。 是否有人成功用匕首注入BroadcastReceiver,或者有人知道我在做什么錯
這是我的BroadcastReceiver模塊類
@Subcomponent(modules = LikeBroadcastReceiverModule.class)
public interface LikeBroadcastReceiverComponent extends AndroidInjector<LikeBroadcaseReceiver> {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder<LikeBroadcaseReceiver>{}}
這是我的BroadcastReceiver模塊類
@Module
public class LikeBroadcastReceiverModule {
@Provides
public LikeBroadcastReceiverView provideBroadcastView(LikeBroadcaseReceiver likeBroadcaseReceiver){
return likeBroadcaseReceiver;
}
@Provides
public BroadcastReceiverPresenter providePresenter(){
return new BroadcastReceiverPresenterImpl();
}}
這是我的應用程序類
public class EasyDriveApplication extends Application implements HasActivityInjector, HasBroadcastReceiverInjector{
@Inject
DispatchingAndroidInjector<Activity> activityDispatchingAndroidInjector;
@Inject
DispatchingAndroidInjector<BroadcastReceiver> broadcastReceiverDispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
//Fabric.with(this, new Crashlytics());
DaggerAppComponent.builder().application(this).build().inject(this);
}
@Override
public AndroidInjector<Activity> activityInjector() {
return activityDispatchingAndroidInjector;
}
@Override
public AndroidInjector<BroadcastReceiver> broadcastReceiverInjector() {
return broadcastReceiverDispatchingAndroidInjector;
}}
這是我的AppComponent類
@Singleton
@Component(modules = {
AndroidInjectionModule.class,
AppModule.class,
DaoModule.class,
MapperModule.class,
UseCaseModule.class,
ThreadingModule.class,
UtilsModule.class,
BroadcastReceiverBuilder.class,
ActivityBuilder.class
})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
void inject(EasyDriveApplication app);}
我的BroadcastReceiverBuilder類看起來像
@Module
public abstract class BroadcastReceiverBuilder {
@Binds
@IntoMap
@BroadcastReceiverKey(LikeBroadcaseReceiver.class)
abstract AndroidInjector.Factory<? extends BroadcastReceiver> bindLikeBroadcastReceiver(LikeBroadcastReceiverComponent.Builder builder);}
這是我得到的錯誤
錯誤:(46,10)錯誤:如果沒有@Provides批注的方法,就無法提供com.presentation.dagger.broadcastReceiver.LikeBroadcastReceiverComponent.Builder。 com.presentation.dagger.broadcastReceiver.LikeBroadcastReceiverComponent.Builder注入com.presentation.dagger.application.module.BroadcastReceiverBuilder.bindLikeBroadcastReceiver(builder)java.util.Map,javax.inject.Provider >>注入dagger.android。 DispatchingAndroidInjector。(injectorFactories)dagger.android.DispatchingAndroidInjector在com.presentation.dagger.application.EasyDriveApplication.broadcastReceiverDispatchingAndroidInjector com.presentation.dagger.application.EasyDriveApplication注入在com.presentation.dagger.application.app.AppComponent.in
我在嘗試找到一種將依賴項注入到BroadcastReceiver中的方法時找到了此頁面,對於在此遇到問題的其他任何人,該如何做
@Provides
fun providesBlah() : Blah = Blah()
class BlahBroadcastReceiver : BroadcastReceiver() {
@Inject
lateinit var blah: Blah
override fun onReceive(context: Context, intent: Intent) {
(context.applicationContext as MyApplication).component().inject(this)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.