【发布时间】:2019-10-14 11:11:41
【问题描述】:
已解决
我是 Dagger 2 的新手,我正在尝试为类提供 Activity 上下文,但没有成功。我搜索了很多,但没有找到任何合适的答案。
我可以提供应用程序上下文。但我也需要提供活动上下文,我不知道有什么好的方法来实现它。
我需要澄清一下,我正在使用 Dagger 作为 Android 依赖项。
def dagger_version = "2.24"
implementation "com.google.dagger:dagger:$dagger_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version"
annotationProcessor "com.google.dagger:dagger-android-processor:$dagger_version"
我也只有一个带有以下代码的 AppComponent:
@Singleton
@Component(
modules = {
AndroidSupportInjectionModule.class,
ActivityBuildersModule.class,
AppModule.class,
ViewModelFactoryModule.class,
}
)
public interface AppComponent extends AndroidInjector<BaseApplication> {
SessionManager sessionManager();
@Component.Builder
interface Builder{
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
除了我的每个活动都有一个模块,但我没有找到为 AppComponent 或从 ActivityModule 注入活动上下文的方法。
这样做的正确方法是什么?
更新
我终于找到了正确的方法。
首先我为要提供的类创建了一个模块
@Module
public class AlertsModule {
@Provides
static Alerts provideAlerts(Activity activity){
return new Alerts(activity);
}
}
然后我转到要注入该自定义类的 ActivityModules 并执行类似的绑定
@Module
public abstract class MainActivityModule {
...
@Binds
abstract Activity providesActivity(MainActivity activity);
...
}
最后,我将 CustomClassModule 包含在我的 ActivityBuildersModule 中,我使用 @ContributesAndroidInjector 来提供我的活动。
@MainScope
@ContributesAndroidInjector(
modules = {
AlertsModule.class,
}
)
abstract MainActivity contributeMainActivity();
【问题讨论】:
-
我刚开始学习匕首。我需要你帮忙。你找到你问题的答案了吗??如果是,请分享答案。