Sobes.tech
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.