Hilt का इस्तेमाल अन्य Jetpack लाइब्रेरी के साथ करें

Hilt में, अन्य Jetpack लाइब्रेरी से क्लास देने के लिए एक्सटेंशन शामिल हैं. Hilt, फ़िलहाल इन Jetpack कॉम्पोनेंट के साथ काम करता है:

  • ViewModel
  • नेविगेशन
  • Compose
  • WorkManager

इन इंटिग्रेशन का फ़ायदा पाने के लिए, आपको Hilt डिपेंडेंसी जोड़नी होगी. इसके लिए डिपेंडेंसी जोड़ने के बारे में ज़्यादा जानकारी, देखें डिपेंडेंसी इंजेक्शन हिलना.

Hilt की मदद से ViewModel ऑब्जेक्ट इंजेक्ट करें

एनोटेट करके ViewModel उपलब्ध कराएं इसे @HiltViewModel के साथ और ViewModel में @Inject एनोटेशन का इस्तेमाल करके दिखाया गया है ऑब्जेक्ट का कंस्ट्रक्टर है.

Kotlin

@HiltViewModel
class ExampleViewModel @Inject constructor(
  private val savedStateHandle: SavedStateHandle,
  private val repository: ExampleRepository
) : ViewModel() {
  ...
}

Java

@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 के साथ एनोटेट की गई कोई गतिविधि या फ़्रैगमेंट ये कर सकता है ViewModelProvider का इस्तेमाल करके सामान्य तरीके से ViewModel इंस्टेंस पाएं या by viewModels() KTX एक्सटेंशन:

Kotlin

@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
  private val exampleViewModel: ExampleViewModel by viewModels()
  ...
}

Java

@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 ViewModels, ViewModelComponent से उपलब्ध कराए जाते हैं. ये मॉडल: ViewModel की ही तरह लाइफ़साइकल होने पर, कॉन्फ़िगरेशन में होने वाले बदलावों से बचा जा सकता है. किसी डिपेंडेंसी को ViewModel पर लागू करने के लिए, @ViewModelScoped एनोटेशन का इस्तेमाल करें.

@ViewModelScoped टाइप से यह तय होता है कि स्कोप वाले एक इंस्टेंस को टाइप, ViewModel में डाली गई सभी डिपेंडेंसी के लिए दिया जाता है. ViewModel के अन्य इंस्टेंस, जो स्कोप वाले इंस्टेंस का अनुरोध करते हैं, ये मिलेंगे कोई दूसरा इंस्टेंस.

अगर किसी एक इंस्टेंस को अलग-अलग ViewModels पर शेयर करना ज़रूरी हो, तो @ActivityRetainedScoped या @Singleton का इस्तेमाल करके दायरे में होना चाहिए.

Jetpack नेविगेशन लाइब्रेरी के साथ इंटिग्रेशन

अपनी Gradle फ़ाइल में ये अतिरिक्त डिपेंडेंसी जोड़ें:

app/build.gradle

ग्रूवी

dependencies {
    ...
    implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0'
}

Kotlin

dependencies {
    ...
    implementation("androidx.hilt:hilt-navigation-fragment:1.0.0")
}

अगर आपका ViewModel नेविगेशन के दायरे में है ग्राफ़, उन फ़्रैगमेंट के साथ काम करने वाले hiltNavGraphViewModels फ़ंक्शन का इस्तेमाल करें जिन्हें @AndroidEntryPoint के साथ बनाई गई.

Kotlin

val viewModel: ExampleViewModel by hiltNavGraphViewModels(R.id.my_graph)

Java

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 के साथ इंटिग्रेट होता है, लिखें और अन्य लाइब्रेरी.

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'
}

Kotlin

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")
}

Worker को इंजेक्ट करने के लिए, क्लास में @HiltWorker और Worker में @AssistedInject एनोटेशन ऑब्जेक्ट का कंस्ट्रक्टर है. आप इसमें सिर्फ़ @Singleton या अनस्कोप वाली बाइंडिंग का इस्तेमाल कर सकते हैं Worker ऑब्जेक्ट. आपको Context और WorkerParameters के बारे में भी बताना होगा @Assisted के साथ डिपेंडेंसी:

Kotlin

@HiltWorker
class ExampleWorker @AssistedInject constructor(
  @Assisted appContext: Context,
  @Assisted workerParams: WorkerParameters,
  workerDependency: WorkerDependency
) : Worker(appContext, workerParams) { ... }

Java

@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 कॉन्फ़िगरेशन में इस तरह पास करें:

Kotlin

@HiltAndroidApp
class ExampleApplication : Application(), Configuration.Provider {

  @Inject lateinit var workerFactory: HiltWorkerFactory

  override fun getWorkManagerConfiguration() =
      Configuration.Builder()
            .setWorkerFactory(workerFactory)
            .build()
}

Java

@HiltAndroidApp
public class ExampleApplication extends Application implements Configuration.Provider {

  @Inject HiltWorkerFactory workerFactory;

  @Override
  public Configuration getWorkManagerConfiguration() {
    return new Configuration.Builder()
             .setWorkerFactory(workerFactory)
             .build();
  }
}