gpt4 book ai didi

java - 无法使用 Dagger 2 提供 Activity Context

转载 作者:行者123 更新时间:2023-11-30 05:00:15 25 4
gpt4 key购买 nike

已解决

我是 Dagger 2 的新手,我正在尝试为类提供 Activity Context 但没有成功。我搜索了很多但没有找到任何合适的答案。

我可以提供应用程序上下文。但我也需要提供 Activity Context,但我不知道有什么好方法可以实现它。

我需要澄清一下,我正在使用 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();
}
}

除了我的每个 Activity 都有一个模块,但我没有找到为 AppComponent 或从 ActivityModule 注入(inject) Activity 上下文的方法。

正确的做法是什么?

更新

我终于找到了正确的方法。

首先我为我想提供的类创建了一个模块

@Module
public class AlertsModule {

@Provides
static Alerts provideAlerts(Activity activity){
return new Alerts(activity);
}

}

然后我转到我想要注入(inject)该自定义类的 ActivityModules 并执行类似的绑定(bind)

@Module
public abstract class MainActivityModule {

...

@Binds
abstract Activity providesActivity(MainActivity activity);

...

}

最后,我将 CustomClassModule 包含在我的 ActivityBuildersModule 中,我在其中使用 @ContributesAndroidInjector 来提供我的 Activity 。

    @MainScope
@ContributesAndroidInjector(
modules = {
AlertsModule.class,
}
)
abstract MainActivity contributeMainActivity();

最佳答案

您可以使用与当前绑定(bind) Application 实例相同的方式绑定(bind) Activity 实例,方法是使用 @Component.Builder@Component.Factory .

一个示例实现看起来像这样:

@Subcomponent(...)
interface ActivitySubcomponent {

@Subcomponent.Factory
interface Factory {
ActivitySubcomponent create(@BindsInstance MyActivity activity)
}
}
@Module(subcomponents = [ActivitySubcomponent.class])
class ApplicationModule {
....
}
public class MyActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
...
((MyApplication) getApplication())
.applicationComponent
.activitySubcomponentFactory()
.create(this)
.inject(this)
}
}

关于java - 无法使用 Dagger 2 提供 Activity Context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58375566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com