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
@Providesolyan 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
@Bindsarra 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.