Dagger 2 Named kann nicht ohne die @Provides-Methode @ angegeben werde

Versuche Dolch 2 zu grocken und habe ein Problem mit namentlich genannten Anbietern. Ich habe ein einfaches Setup wie folgt:

// Module
@Module
class AppModule(private val app: App) {
    @Provides @AppScope fun providesApp() = app

    @Provides @AppScope fun provideSharedPreferences(app: App) = PreferenceManager.getDefaultSharedPreferences(app)

    @Provides @AppScope @Named("Uri1") fun providesUri1() = Uri.Builder().scheme("https").authority("authory1").build()

    @Provides @AppScope @Named("Uri2") fun providesUri2() = Uri.Builder().scheme("https").authority("authory2").build()
}

// Component
@AppScope
@Component(modules = arrayOf(AppModule::class))
interface AppComponent {
    fun inject(target: MainActivity)
}

// MainActivity
@Inject @AppScope lateinit var preferences: SharedPreferences
@Inject @AppScope @Named("Uri1") lateinit var uri1: Uri
@Inject @AppScope @Named("Uri2") lateinit var uri2: Uri

Wenn ich mein Projekt neu aufbaue, bekomme ich:

Error:Gradle: android.net.Uri cannot be provided without an @Provides- or @Produces-annotated method.

Ich verstehe nicht, warum das Hinzufügen des Named-Qualifiers hier für mich nicht funktioniert. Wenn ich diese entferne, kann ich ohne Probleme eine Instanz von SharedPreferences erhalten.

Jeder Einblick in das, was ich falsch mache, wäre dankbar!

BEARBEITEN

Änderungen pro Vorschläge mit den gleichen Ergebnissen wie oben.

// New module
@Module
class AppModule(private val app: App) {
    @Provides @AppScope fun providesApp() = app

    @Provides @AppScope fun provideSharedPreferences(app: App) = PreferenceManager.getDefaultSharedPreferences(app)

    @Provides @AppScope @Tag("Uri1") fun providesUri1(): Uri = Uri.Builder().scheme("https").authority("authority1").build()

    @Provides @AppScope @Tag("Uri2") fun providesUri2(): Uri = Uri.Builder().scheme("https").authority("authority2").build()
}

// Tag annotation
@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class Tag(val tag: String = "")

// MainActivity
@Inject @AppScope lateinit var preferences: SharedPreferences
@Inject @AppScope @Tag("Uri1") lateinit var uri1: Uri
@Inject @AppScope @Tag("Uri2") lateinit var uri2: Uri

Project Repo @ Github

Antworten auf die Frage(2)

Ihre Antwort auf die Frage