CustomScope 不能引用具有不同作用域的绑定 [英] CustomScope may not reference bindings with different scopes

查看:42
本文介绍了CustomScope 不能引用具有不同作用域的绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 dagger 的新手,我已经像这样定义了我的应用程序组件

I am new to dagger, I have defined my application component like this

@Singleton
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
    void inject(BaseActivity activity);
    Context context();
}

这是我的应用程序模块

@Module
public class ApplicationModule {

    public TipoApplication application;

    public ApplicationModule(TipoApplication application) {
        this.application = application;
    }

    @Singleton
    @Provides
    public Context provideContext(){return application.getApplicationContext();}

    @Singleton
    @Provides
    public SharedPreferences provideSharedPreferences(Context context){
        return PreferenceManager.getDefaultSharedPreferences(context);
    }

    @Singleton
    @Provides
    public Gson provideGson(){
        return new Gson();
    }

    @Singleton
    @Provides
    public SharedPrefsManager provideSharedPrefsManager(SharedPreferences sharedPreferences, Gson gson){
        return new SharedPrefsManager(sharedPreferences, gson);
    }
}

我已经创建了一个依赖组件 LocationProviderComponent

I have created a dependent Component LocationProviderComponent

@LocationScope
@Component(dependencies = {ApplicationComponent.class},modules = {LocationProviderModule.class})
public interface LocationProviderComponent {
    void inject(LocationRepository locationRepository);
}

最后是我的 LocationProviderModule

And Finally My LocationProviderModule

@Module
public class LocationProviderModule {

    @Singleton
    @Provides
    FusedLocationProviderClient provideFusedLocationProviderClient(Context context) {
        return LocationServices.getFusedLocationProviderClient(context);

    }

    @Singleton
    @Provides
    LocationRequest provideLocationRequest() {
        return new LocationRequest()
                .setInterval(5000)
                .setFastestInterval(60000)
                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    }

    @Singleton
    @Provides
    LocationSettingsRequest provideLocationSettingRequest(LocationRequest mLocationRequest) {
        return new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest).build();
    }

}

我在构建时遇到 2 个错误.

I am getting 2 errors when I build.

1st 找不到符号类 DaggerApplicationComponent第二个

1st cannot find symbol class DaggerApplicationComponent 2nd

LocationProviderComponent scoped with LocationScope may not reference bindings with different scopes:
@Singleton @Provides FusedLocationProviderClient LocationProviderModule.provideFusedLocationProviderClient(android.content.Context)
@Singleton @Provides LocationRequest .module.LocationProviderModule.provideLocationRequest()

请告诉我我做错了什么.

Please tell me what I am doing wrong.

推荐答案

任何模块的 @Provides 方法只能与它们所属的组件具有相同的作用域.在此处阅读更多信息.

Any module's @Provides method may only have the same scope as the component they are part of. Read more here.

在你的情况下 LocationProviderModuleLocationProviderComponent 的一部分,它的范围是 @LocationScope 而该模块中的提供方法使用 @Singleton 范围.这正是 Dagger 所抱怨的:

In your case LocationProviderModule is part of the LocationProviderComponent which is scoped with @LocationScope whereas the provides methods in that module uses the @Singleton scope. This is exactly what Dagger is complaining about:

LocationProviderComponent 以 LocationScope 为范围不能引用不同作用域的绑定

LocationProviderComponent scoped with LocationScope may not reference bindings with different scopes

它也指出了问题所在:

@Singleton @Provides FusedLocationProviderClient LocationProviderModule.provideFusedLocationProviderClient(android.content.Context)
@Singleton @Provides LocationRequest.module.LocationProviderModule.provideLocationRequest()

您只需要在 LocationProviderModule 中使用 @LocationScope 而不是使用 @Singleton.

Instead of using @Singleton, you just need to use @LocationScope in the LocationProviderModule.

这篇关于CustomScope 不能引用具有不同作用域的绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆