CustomScope может не ссылаться на привязки с разными областями - PullRequest
0 голосов
/ 15 декабря 2018

Я новичок в dagger, я определил свой компонент приложения следующим образом

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

Это мой ApplicationModule

@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

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

И, наконец, мой 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 ошибки при сборке.

1-й не может найти класс символов 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()

Пожалуйстаскажи мне, что я делаю не так.

1 Ответ

0 голосов
/ 15 декабря 2018

Метод любого модуля @Provides может иметь только ту же область действия, что и компонент, частью которого он является.Подробнее здесь .

В вашем случае LocationProviderModule является частью LocationProviderComponent, которая ограничена @LocationScope, тогда как методы обеспечения в этом модуле используют область действия @Singleton.Это именно то, на что жалуется Даггер:

LocationProviderComponent, ограниченный областью действия LocationScope, может не ссылаться на привязки с разными областями

Он также указывает, где проблема:

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

Вместо @Singleton, вам просто нужно использовать @LocationScope в LocationProviderModule.

...