.
انوتیشن 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@ استفاده میکنیم.