Sobes.tech
Junior — Middle

V čem se liší mechanismus Binds od Provides v kontextu dependency injection nebo modulárních systémů?

sobes.tech AI

Odpověď od AI

V kontextu závislostní injekce (například v Androidu s Daggerem) slouží anotace @Provides a @Binds k různým účelům, i když obě slouží k poskytování závislostí.

  • @Provides se používá pro metody, které vytvářejí a vracejí konkrétní instanci objektu. Obvykle je to metoda s tělem, do které můžete napsat logiku tvorby objektu.

  • @Binds se používá k propojení rozhraní s jeho implementací bez vytváření nové instance. Metoda s @Binds musí být abstraktní a jednoduše vracet implementaci rozhraní předanou jako parametr.

Příklad:

@Module
abstract class NetworkModule {
    @Binds
    abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}

@Module
class DatabaseModule {
    @Provides
    fun provideDatabase(): Database {
        return DatabaseImpl()
    }
}

Proto je @Binds efektivnější a jednodušší, když je potřeba pouze uvést, že rozhraní je implementováno konkrétní třídou, zatímco @Provides je vhodnější, když je potřeba logika tvorby objektu.