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í.
-
@Providesse 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. -
@Bindsse používá k propojení rozhraní s jeho implementací bez vytváření nové instance. Metoda s@Bindsmusí 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.