سپس، یک اکتیویتی یا قطعه ای که با @AndroidEntryPoint حاشیه نویسی شده است، می تواند نمونه ViewModel با استفاده از ViewModelProvider یا پسوندهای KTXby viewModels() دریافت کند:
همه مدلهای Hilt View توسط ViewModelComponent ارائه میشوند که از چرخه عمر یک ViewModel پیروی میکنند و به این ترتیب، میتوانند از تغییرات پیکربندی جان سالم به در ببرند. برای ایجاد دامنه وابستگی به ViewModel از حاشیه نویسی @ViewModelScoped استفاده کنید.
یک نوع @ViewModelScoped آن را به گونهای میسازد که یک نمونه واحد از نوع scoped در تمام وابستگیهای تزریق شده به ViewModel ارائه شود. سایر نمونههای ViewModel که نمونه محدودهشده را درخواست میکنند، نمونه متفاوتی دریافت خواهند کرد.
اگر لازم است یک نمونه در بین ViewModel های مختلف به اشتراک گذاشته شود، باید با استفاده از @ActivityRetainedScoped یا @Singleton محدوده بندی شود.
ادغام با کتابخانه ناوبری Jetpack
وابستگی های اضافی زیر را به فایل Gradle خود اضافه کنید:
اگر ViewModel شما به نمودار پیمایش است، از تابع hiltNavGraphViewModels استفاده کنید که با قطعاتی که با @AndroidEntryPoint حاشیه نویسی شده اند کار می کند.
وابستگی های اضافی زیر را به فایل Gradle خود اضافه کنید. توجه داشته باشید که علاوه بر کتابخانه، باید یک پردازشگر حاشیه نویسی اضافی نیز اضافه کنید که در بالای پردازنده حاشیه نویسی Hilt کار می کند:
app/build.gradle
شیار
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 حاشیه نویسی کنید:
سپس، از کلاس Application خود بخواهید رابط Configuration.Provider پیاده سازی کند، نمونه ای از HiltWorkFactory را تزریق کرده و آن را به صورت زیر به پیکربندی WorkManager ارسال کنید:
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Use Hilt with other Jetpack libraries\n\nHilt includes extensions for providing classes from other Jetpack libraries.\nHilt currently supports the following Jetpack components:\n\n- `ViewModel`\n- Navigation\n- Compose\n- WorkManager\n\nYou must add the Hilt dependencies to take advantage of these integrations. For\nmore information about adding dependencies, see [Dependency injection with\nHilt](/training/dependency-injection/hilt-android#setup).\n\nInject ViewModel objects with Hilt\n----------------------------------\n\nProvide a [`ViewModel`](/topic/libraries/architecture/viewmodel) by annotating\nit with `@HiltViewModel` and using the `@Inject` annotation in the `ViewModel`\nobject's constructor. \n\n### Kotlin\n\n```kotlin\n@HiltViewModel\nclass ExampleViewModel @Inject constructor(\n private val savedStateHandle: SavedStateHandle,\n private val repository: ExampleRepository\n) : ViewModel() {\n ...\n}\n```\n\n### Java\n\n```java\n@HiltViewModel\npublic class ExampleViewModel extends ViewModel {\n\n private final ExampleRepository repository;\n private final SavedStateHandle savedStateHandle;\n\n @Inject\n ExampleViewModel(\n SavedStateHandle savedStateHandle,\n ExampleRepository repository)\n {\n this.savedStateHandle = savedStateHandle;\n this.repository = repository;\n }\n ...\n}\n```\n\nThen, an activity or a fragment that is annotated with `@AndroidEntryPoint` can\nget the `ViewModel` instance as normal using `ViewModelProvider` or the\n`by viewModels()` [KTX extensions](/kotlin/ktx): \n\n### Kotlin\n\n```kotlin\n@AndroidEntryPoint\nclass ExampleActivity : AppCompatActivity() {\n private val exampleViewModel: ExampleViewModel by viewModels()\n ...\n}\n```\n\n### Java\n\n```java\n@AndroidEntryPoint\npublic class ExampleActivity extends AppCompatActivity {\n\n private ExampleViewModel exampleViewModel;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n exampleViewModel = new ViewModelProvider(this).get(ExampleViewModel.class);\n }\n ...\n}\n```\n| **Note:** To use Dagger's assisted injection with ViewModels, see the following [Github issue](https://github.com/google/dagger/issues/2287).\n\n### @ViewModelScoped\n\nAll Hilt ViewModels are provided by the `ViewModelComponent` which follows the\nsame lifecycle as a `ViewModel`, and as such, can survive configuration changes.\nTo scope a dependency to a `ViewModel` use the `@ViewModelScoped` annotation.\n\nA `@ViewModelScoped` type will make it so that a single instance of the scoped\ntype is provided across all dependencies injected into the `ViewModel`.\nOther instances of a ViewModel that request the scoped instance will receive\na different instance.\n\nIf a single instance needs to be shared across various ViewModels, then it\nshould be scoped using either `@ActivityRetainedScoped` or `@Singleton`.\n\nIntegration with the Jetpack navigation library\n-----------------------------------------------\n\nAdd the following additional dependencies to your Gradle file:\n\napp/build.gradle \n\n### Groovy\n\n```groovy\ndependencies {\n ...\n implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0'\n}\n```\n\n### Kotlin\n\n```kotlin\ndependencies {\n ...\n implementation(\"androidx.hilt:hilt-navigation-fragment:1.0.0\")\n}\n```\n\nIf your `ViewModel` is [scoped to the navigation\ngraph](/guide/navigation/navigation-programmatic#share_ui-related_data_between_destinations_with_viewmodel),\nuse the `hiltNavGraphViewModels` function that works with fragments that are\nannotated with `@AndroidEntryPoint`. \n\n### Kotlin\n\n```kotlin\nval viewModel: ExampleViewModel by hiltNavGraphViewModels(R.id.my_graph)\n```\n\n### Java\n\n```java\nNavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.my_graph);\n\nExampleViewModel exampleViewModel = new ViewModelProvider(\n backStackEntry,\n HiltViewModelFactory.create(context, backStackEntry)\n).get(ExampleViewModel.class)\n```\n\nIntegration with Jetpack Compose\n--------------------------------\n\nTo see how Hilt integrates with Jetpack Compose, see the Hilt section of\n[Compose and other libraries](/jetpack/compose/libraries#hilt).\n\nInject WorkManager with Hilt\n----------------------------\n\nAdd the following additional dependencies to your Gradle file. Note that in\naddition to the library, you need to include an additional annotation processor\nthat works on top of the Hilt annotation processor:\n\napp/build.gradle \n\n### Groovy\n\n```groovy\ndependencies {\n ...\n implementation 'androidx.hilt:hilt-work:1.0.0'\n // When using Kotlin.\n kapt 'androidx.hilt:hilt-compiler:1.0.0'\n // When using Java.\n annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0'\n}\n```\n\n### Kotlin\n\n```kotlin\ndependencies {\n implementation(\"androidx.hilt:hilt-work:1.0.0\")\n // When using Kotlin.\n kapt(\"androidx.hilt:hilt-compiler:1.0.0\")\n // When using Java.\n annotationProcessor(\"androidx.hilt:hilt-compiler:1.0.0\")\n}\n```\n\nInject a [`Worker`](/reference/kotlin/androidx/work/Worker) using the\n`@HiltWorker` annotation in the class and `@AssistedInject` in the `Worker`\nobject's constructor. You can use only `@Singleton` or unscoped bindings in\n`Worker` objects. You must also annotate the `Context` and `WorkerParameters`\ndependencies with `@Assisted`: \n\n### Kotlin\n\n```kotlin\n@HiltWorker\nclass ExampleWorker @AssistedInject constructor(\n @Assisted appContext: Context,\n @Assisted workerParams: WorkerParameters,\n workerDependency: WorkerDependency\n) : Worker(appContext, workerParams) { ... }\n```\n\n### Java\n\n```java\n@HiltWorker\npublic class ExampleWorker extends Worker {\n\n private final WorkerDependency workerDependency;\n\n @AssistedInject\n ExampleWorker(\n @Assisted @NonNull Context context,\n @Assisted @NonNull WorkerParameters params,\n WorkerDependency workerDependency\n ) {\n super(context, params);\n this.workerDependency = workerDependency;\n }\n ...\n}\n```\n\nThen, have your [`Application`](/reference/android/app/Application) class\nimplement the `Configuration.Provider` interface, inject an instance of\n`HiltWorkFactory`, and pass it into the `WorkManager` configuration as follows: \n\n### Kotlin\n\n```kotlin\n@HiltAndroidApp\nclass ExampleApplication : Application(), Configuration.Provider {\n\n @Inject lateinit var workerFactory: HiltWorkerFactory\n\n override fun getWorkManagerConfiguration() =\n Configuration.Builder()\n .setWorkerFactory(workerFactory)\n .build()\n}\n```\n\n### Java\n\n```java\n@HiltAndroidApp\npublic class ExampleApplication extends Application implements Configuration.Provider {\n\n @Inject HiltWorkerFactory workerFactory;\n\n @Override\n public Configuration getWorkManagerConfiguration() {\n return new Configuration.Builder()\n .setWorkerFactory(workerFactory)\n .build();\n }\n}\n```\n| **Note:** Because this customizes the `WorkManager` configuration, you also must remove the default initializer from the `AndroidManifest.xml` file as specified in the [WorkManager docs](https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration).\n| **Warning:** `WorkManager` version `2.6.0-alpha01` or higher uses the `androidx.startup` initializer. To properly configure `WorkManager` in this version with Hilt, check out the [`WorkManager` release notes](https://developer.android.com/jetpack/androidx/releases/work#2.6.0-alpha01)."]]