Sobes.tech
Junior — Middle

Aký je rozdiel medzi mechanizmami Binds a Provides v kontexte injektáže závislostí alebo modulárnych systémov?

sobes.tech AI

Odpoveď od AI

V kontexte injekcie závislostí (napríklad v Android s Daggerom) slúžia anotácie @Provides a @Binds na rôzne účely, hoci obe slúžia na poskytovanie závislostí.

  • @Provides sa používa pre metódy, ktoré vytvárajú a vracajú konkrétnu inštanciu objektu. Zvyčajne je to metóda s telom, do ktorej môžete napísať logiku tvorby objektu.

  • @Binds sa aplikuje na prepojenie rozhrania s jeho implementáciou bez vytvárania novej inštancie. Metóda s @Binds musí byť abstraktná a jednoducho vracať implementáciu rozhrania odovzdanú ako parameter.

Príklad:

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

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

Preto je @Binds efektívnejší a jednoduchší, keď je potrebné len uviesť, že rozhranie je implementované konkrétnou triedou, zatiaľ čo @Provides je vhodnejšie, keď je potrebná logika na vytvorenie objektu.