.
انوتیشن Binds@
از این انوتیشن فقط برای تزریق اینترفیس استفاده میشه. در کل استفاده از چندان توصیه نمیشه.
اگر اینترفیس زیر رو داشته باشیم:
interface SomeInterface{
fun getAllThings() : String
}
و کلاس زیر اون رو پیاده سازی کرده باشه:
class SomeInterfaceImpl @Inject constructor() : SomeInterface{
override fun getAllThings(): String {
return "A Thing"
}
}
در این صورت کلاس ماژول حتما باید از نوع abstract باشه و خود متد تزریق هم باید از نوع abstract باشه:
@Module
@InstallIn(ActivityComponent::class)
abstract class MyModule{
@Binds
@ActivityScoped
abstract fun bindSomeDependency(
someImpl : SomeInterfaceImpl
) : SomeInterface
}
معرفی انوتیشن های hilt:
1. ابتدا می بایست کلاس application را اکستند کرده و انوتیشن زیر را قبل از معرفی کلاس بنویسیم:
HiltAndroidApp@
2. استفاده از انوتیشن زیر به معنی این است که میشه در این کلاس آبجکت inject کرد:
AndroidEntryPoint@
3. استفاده از Inject@ در کانستراکتور یک کلاس به این معنی است که شی این کلاس تزریق خواهد شد. به صورت زیر:
class MyClass @Inject constructor(وابستگی ها) { }
در این کلاس اگر وابستگی وجود داشته باشه و در کلاس module وابستگی ها تعریف شده باشن، وابستگی ها تزریق میشن.
4. برای تزریق context قبلش از انوتیشن ApplicationContext@ استفاده میکنیم.