Sobes.tech
Junior — Middle

Mi a különbség a Binds és a Provides mechanizmus között a dependency injection vagy moduláris rendszerek kontextusában?

sobes.tech MI

Válasz az MI-től

A függőséginjektálás kontextusában (például Androidban Daggerrel) az @Provides és az @Binds annotációk különböző célokra szolgálnak, bár mindkettő a függőségek biztosítására használatos.

  • Az @Provides olyan módszerekhez használatos, amelyek konkrét példányt hoznak létre és adnak vissza egy objektumból. Általában ez egy olyan metódus, amelynek teste van, ahol az objektum létrehozásának logikáját írhatod.

  • Az @Binds arra szolgál, hogy egy interfészt összekapcsoljon annak implementációjával anélkül, hogy új példányt hozna létre. Az @Binds-szel ellátott módszernek absztraktnak kell lennie, és egyszerűen vissza kell adnia a paraméterként átadott interfész implementációját.

Példa:

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

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

Ezért az @Binds hatékonyabb és egyszerűbb, amikor csak meg akarod mondani, hogy egy interfész egy konkrét osztály által valósul meg, míg az @Provides akkor hasznos, ha logikára van szükség az objektum létrehozásához.