Hilt شامل برنامه های افزودنی برای ارائه کلاس های دیگر کتابخانه های Jetpack است. Hilt در حال حاضر از اجزای Jetpack زیر پشتیبانی می کند:
-
ViewModel
- ناوبری
- نوشتن
- مدیر کار
برای استفاده از این ادغام ها باید وابستگی های Hilt را اضافه کنید. برای اطلاعات بیشتر در مورد افزودن وابستگی ها، به تزریق وابستگی با Hilt مراجعه کنید.
اشیاء ViewModel را با Hilt تزریق کنید
یک ViewModel
با حاشیه نویسی با @HiltViewModel
و استفاده از حاشیه نویسی @Inject
در سازنده شی ViewModel
ارائه دهید.
کاتلین
@HiltViewModel class ExampleViewModel @Inject constructor( private val savedStateHandle: SavedStateHandle, private val repository: ExampleRepository ) : ViewModel() { ... }
جاوا
@HiltViewModel public class ExampleViewModel extends ViewModel { private final ExampleRepository repository; private final SavedStateHandle savedStateHandle; @Inject ExampleViewModel( SavedStateHandle savedStateHandle, ExampleRepository repository) { this.savedStateHandle = savedStateHandle; this.repository = repository; } ... }
سپس، یک اکتیویتی یا قطعه ای که با @AndroidEntryPoint
حاشیه نویسی شده است، می تواند نمونه ViewModel
با استفاده از ViewModelProvider
یا پسوندهای KTX by viewModels()
دریافت کند:
کاتلین
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
جاوا
@AndroidEntryPoint public class ExampleActivity extends AppCompatActivity { private ExampleViewModel exampleViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); exampleViewModel = new ViewModelProvider(this).get(ExampleViewModel.class); } ... }
@ViewModelScoped
همه مدلهای Hilt View توسط ViewModelComponent
ارائه میشوند که از چرخه عمر یک ViewModel
پیروی میکنند و به این ترتیب، میتوانند از تغییرات پیکربندی جان سالم به در ببرند. برای ایجاد دامنه وابستگی به ViewModel
از حاشیه نویسی @ViewModelScoped
استفاده کنید.
یک نوع @ViewModelScoped
آن را به گونهای میسازد که یک نمونه واحد از نوع scoped در تمام وابستگیهای تزریق شده به ViewModel
ارائه شود. سایر نمونههای ViewModel که نمونه محدودهشده را درخواست میکنند، نمونه متفاوتی دریافت خواهند کرد.
اگر لازم است یک نمونه در بین ViewModel های مختلف به اشتراک گذاشته شود، باید با استفاده از @ActivityRetainedScoped
یا @Singleton
محدوده بندی شود.
ادغام با کتابخانه ناوبری Jetpack
وابستگی های اضافی زیر را به فایل Gradle خود اضافه کنید:
شیار
dependencies { ... implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0' }
کاتلین
dependencies { ... implementation("androidx.hilt:hilt-navigation-fragment:1.0.0") }
اگر ViewModel
شما به نمودار پیمایش است، از تابع hiltNavGraphViewModels
استفاده کنید که با قطعاتی که با @AndroidEntryPoint
حاشیه نویسی شده اند کار می کند.
کاتلین
val viewModel: ExampleViewModel by hiltNavGraphViewModels(R.id.my_graph)
جاوا
NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.my_graph); ExampleViewModel exampleViewModel = new ViewModelProvider( backStackEntry, HiltViewModelFactory.create(context, backStackEntry) ).get(ExampleViewModel.class)
ادغام با Jetpack Compose
برای مشاهده نحوه ادغام Hilt با Jetpack Compose، به بخش Hilt Compose و سایر کتابخانه ها مراجعه کنید.
WorkManager را با Hilt تزریق کنید
وابستگی های اضافی زیر را به فایل Gradle خود اضافه کنید. توجه داشته باشید که علاوه بر کتابخانه، باید یک پردازشگر حاشیه نویسی اضافی نیز اضافه کنید که در بالای پردازنده حاشیه نویسی Hilt کار می کند:
شیار
dependencies { ... implementation 'androidx.hilt:hilt-work:1.0.0' // When using Kotlin. kapt 'androidx.hilt:hilt-compiler:1.0.0' // When using Java. annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0' }
کاتلین
dependencies { implementation("androidx.hilt:hilt-work:1.0.0") // When using Kotlin. kapt("androidx.hilt:hilt-compiler:1.0.0") // When using Java. annotationProcessor("androidx.hilt:hilt-compiler:1.0.0") }
با استفاده از حاشیه نویسی @HiltWorker
در کلاس و @AssistedInject
در سازنده شی Worker
یک Worker
تزریق کنید. در اشیاء Worker
فقط میتوانید از @Singleton
یا پیوندهای بدون اسکوپ استفاده کنید. همچنین باید وابستگی های Context
و WorkerParameters
را با @Assisted
حاشیه نویسی کنید:
کاتلین
@HiltWorker class ExampleWorker @AssistedInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
جاوا
@HiltWorker public class ExampleWorker extends Worker { private final WorkerDependency workerDependency; @AssistedInject ExampleWorker( @Assisted @NonNull Context context, @Assisted @NonNull WorkerParameters params, WorkerDependency workerDependency ) { super(context, params); this.workerDependency = workerDependency; } ... }
سپس، از کلاس Application
خود بخواهید رابط Configuration.Provider
پیاده سازی کند، نمونه ای از HiltWorkFactory
را تزریق کرده و آن را به صورت زیر به پیکربندی WorkManager
ارسال کنید:
کاتلین
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }
جاوا
@HiltAndroidApp public class ExampleApplication extends Application implements Configuration.Provider { @Inject HiltWorkerFactory workerFactory; @Override public Configuration getWorkManagerConfiguration() { return new Configuration.Builder() .setWorkerFactory(workerFactory) .build(); } }