我想使用dagger方法来帮助类。 Bellow是我目前用于Activity的代码。但是我无法理解我应该如何将它用于帮助类。
在接收器内调用辅助类的位置。
AppComponent.java
@Singleton
@Component(modules = { AndroidSupportInjectionModule.class, AppModule.class, ActivityBuilder.class})
public interface AppComponent extends AndroidInjector<DaggerApplication> {
void inject(MyApplication app);
@Override
void inject(DaggerApplication instance);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
ActivityBuilder.java
@Module
public abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = MainActivityModule.class)
abstract MainActivity bindMainActivity();
}
AppModule.java
@Module
public abstract class AppModule {
@Binds
abstract Context provideContext(Application application);
}
MainActivityModule.java
@Module
public abstract class MainActivityModule {
@Provides
static MainPresenter provideMainPresenter(MainView mainView) {
return new MainPresenterImpl(mainView);
}
@Binds
abstract MainView provideMainView(MainActivity mainActivity);
}
以上代码是我用于活动的代码。我现在也愿意为我的助手类使用相同的结构。我做了大量的研究并尝试了一些失败的方法,因为我的Helper类需要2个参数。第一个是上下文,另一个是IPhoneCallReceiver。我知道可以使用@Module
在@Binds
中访问IPhoneCallReceiver,但我遇到了获取上下文的问题。 Helper类是 CallStateHelper
PhoneCallReceiver.java
public class PhoneCallReceiver extends BroadcastReceiver implements IPhoneCallReceiver {
CallStateHelper callStateHelper;
@Override
public void onReceive(Context context, Intent intent) {
callStateHelper.stateChange(intent);
}
}
CallStateHelper.java
public class CallStateHelper extends PhoneStateListener {
private IPhoneCallReceiver receiver;
public CallStateHelper(Context context, IPhoneCallReceiver receiver) {
this.receiver = receiver;
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
}
}
我希望@Inject
使用CallStateHelper,并希望它为Singleton
Class。我是Dagger的新手
答案 0 :(得分:0)
我终于做到了。
您只需提供DispatchingAndroidInjector<BroadcastReceiver>