از Hilt با سایر کتابخانه های Jetpack استفاده کنید

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 خود اضافه کنید:

app/build.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 کار می کند:

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 حاشیه نویسی کنید:

کاتلین

@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();
  }
}