java - Android Dagger2 2.11 unscoped Appcomponent reference scoped bindings

标签 java android dagger-2

我使用 https://medium.com/@iammert/new-android-injector-with-dagger-2-part-1-8baa60152abe 的 dagger2 演示.我已将 SharedPreferences 添加到我的 AppModule.java

@Module(subcomponents = {
    MainActivityComponent.class,
    DetailActivityComponent.class,
    Detail2ActivityComponent.class})
public class AppModule {

@Provides
@Singleton
Context provideContext(Application application) {
    return application;
    }

@Provides
@Singleton //if i remove dagger works right
SharedPreferences providesSharedPreferences(Application application) {
    return PreferenceManager.getDefaultSharedPreferences(application);
    }

}

我在 MainActivity 中注入(inject) SharedPreferences。重建项目后我得到错误

enter image description here 如果我通过 providesSharedPreferences 删除注释 @Singleton,则项目重建正确。 为什么 providesSharedPreferences 会出现问题 @Singleton 注解?

最佳答案

您需要将@Singleton 添加到AppComponent 类:

    @Singleton // <---- Add this line
    @Component(modules = {
        AndroidInjectionModule.class,
        AppModule.class,
        ActivityBuilder.class})
    public interface AppComponent {

        @Component.Builder
        interface Builder {
          @BindsInstance Builder application(Application application);
          AppComponent build();
        }

        void inject(AndroidSampleApp app);
    }

关于java - Android Dagger2 2.11 unscoped Appcomponent reference scoped bindings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413190/

相关文章:

java - 有没有办法在服务器端的 node.js 中运行 Java Applet?

java - 路由 Camel cron 表达式

java - Netbeans 上的 PermGen 空间错误

android - 无法在 OkHttp3 : Level has private access and SetLevel is deprecated 中设置级别

dagger - Dagger 和 Dagger 2.0 有什么区别?

android - 将 @ActivityScoped 对象注入(inject)到 Fragment 中

android - Dagger 2 : Update provided object in scope

java - 如何将-javagent/path/to/newrelic.jar参数传递给运行HiveMetaStore服务器的JVM

java - 将 http 407 错误作为 IOException

java - Android 应用程序在 startActivity() 上崩溃