簡體   English   中英

Android Dagger 2.11中的BroadcastReceiver

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM