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í.
-
@Providessa 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. -
@Bindssa aplikuje na prepojenie rozhrania s jeho implementáciou bez vytvárania novej inštancie. Metóda s@Bindsmusí 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.