Middle+
Dagger @Provides ve @Binds anotasyonları hakkında konuş
sobes.tech yapay zeka
AI'dan gelen yanıt
@Provides anotasyonu, bağımlılık örnekleri oluşturan yöntemleri tanımlamak için modüllerde kullanılır. Bu yöntemler @Provides ile işaretlenmiş olup, sağladıkları bağımlılık türünü döner. Yöntem gövdesinde, örneğin oluşturma mantığı bulunur.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Veritabanı oluşturma mantığı
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
@Binds anotasyonu, modüllerde bir arayüzün belirli bir uygulamasıyla bağlantılı olduğunu belirtmek için kullanılır. Bu, uygulamayı alan ve arayüzü döndüren soyut yöntemlere uygulanır. Dagger, @Provides'a kıyasla @Binds için daha verimli kod üretir, çünkü örnek oluşturmak için yöntem çağrısı gerekmez.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Ana farklar:
@Provides, nesne örnekleri oluşturmak için kullanılır ve genellikle daha karmaşık mantık veya bağımlılıklar gerektirir.@Binds, soyut türleri (arayüzleri) somut uygulamalarına bağlamak için kullanılır ve karmaşık oluşturma mantığı olmadığında daha etkilidir.