CustomScope 不能引用具有不同作用域的绑定 [英] CustomScope may not reference bindings with different scopes
问题描述
我是 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.
在你的情况下 LocationProviderModule
是 LocationProviderComponent
的一部分,它的范围是 @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屋!