অন্যান্য জেটপ্যাক লাইব্রেরি থেকে ক্লাস সরবরাহ করার জন্য হিল্টে এক্সটেনশন অন্তর্ভুক্ত রয়েছে। হিল্ট বর্তমানে নিম্নলিখিত জেটপ্যাক কম্পোনেন্টগুলো সমর্থন করে:
- রচনা করুন
-
ViewModel - নেভিগেশন
- ওয়ার্কম্যানেজার
এই ইন্টিগ্রেশনগুলির সুবিধা নিতে আপনাকে অবশ্যই Hilt ডিপেন্ডেন্সিগুলি যোগ করতে হবে। ডিপেন্ডেন্সি যোগ করার বিষয়ে আরও তথ্যের জন্য, "Dipendency injection with Hilt" দেখুন।
জেটপ্যাক কম্পোজের সাথে ইন্টিগ্রেশন
Jetpack Compose-এর সাথে Hilt কীভাবে সমন্বিত হয় তা দেখতে, Compose এবং অন্যান্য লাইব্রেরি- এর Hilt বিভাগটি দেখুন।
Hilt ব্যবহার করে ViewModel অবজেক্ট ইনজেক্ট করুন
একটি ViewModel প্রদান করতে, এটিকে @HiltViewModel দিয়ে অ্যানোটেট করুন এবং ViewModel অবজেক্টের কনস্ট্রাক্টরে @Inject অ্যানোটেশনটি ব্যবহার করুন।
@HiltViewModel class ExampleViewModel @Inject constructor( private val savedStateHandle: SavedStateHandle, private val repository: ExampleRepository ) : ViewModel() { ... }
তারপর, @AndroidEntryPoint দিয়ে অ্যানোটেট করা একটি অ্যাক্টিভিটি ViewModelProvider ব্যবহার করে স্বাভাবিকভাবে অথবা by viewModels() KTX এক্সটেনশনের মাধ্যমে ViewModel ইনস্ট্যান্সটি পেতে পারে:
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
ViewModel-এর সাথে অ্যাসিস্টেড ইনজেকশন ব্যবহার করুন
Hilt, ViewModel-এর জন্য অ্যাসিস্টেড ইনজেকশন সমর্থন করে। অ্যাসিস্টেড ইনজেকশন আপনাকে Hilt-পরিচালিত ডিপেন্ডেন্সিগুলোর পাশাপাশি ডাইনামিক রানটাইম আর্গুমেন্ট ইনজেক্ট করার সুযোগ দেয়। অ্যাসিস্টেড ইনজেকশন ব্যবহার করতে, আপনার ViewModel কনস্ট্রাক্টরকে @AssistedInject দিয়ে অ্যানোটেট করুন এবং ডাইনামিক প্যারামিটারগুলোকে @Assisted দিয়ে চিহ্নিত করুন। আপনাকে অবশ্যই একটি @AssistedFactory ইন্টারফেসও ডিফাইন করতে হবে, যা Hilt-কে প্রয়োজনীয় @ViewModelProvider.Factory স্বয়ংক্রিয়ভাবে তৈরি করার জন্য একটি সেতু হিসেবে কাজ করে।
@HiltViewModel(assistedFactory = MyViewModel.Factory::class) class MyViewModel @AssistedInject constructor( @Assisted val userId: String, private val repository: MyRepository ) : ViewModel() { @AssistedFactory interface Factory { fun create(userId: String): MyViewModel } }
Compose-এ, নেভিগেশন বা স্ক্রিন ইনিশিয়ালাইজেশনের সময় hiltViewModel ফাংশনে অ্যাসিস্টেড ফ্যাক্টরি পাস করে আপনি এটি ব্যবহার করতে পারেন। এই পদ্ধতিটি ম্যানুয়াল ফ্যাক্টরি বয়লারপ্লেটের প্রয়োজনীয়তা দূর করে এবং একই সাথে আপনার ViewModel-কে নেভিগেশন ব্যাক স্ট্যাকের মধ্যে সঠিকভাবে স্কোপড রাখে। আরও তথ্যের জন্য, অ্যাসিস্টেড ইনজেকশন বিষয়ে Hilt ডকুমেন্টেশন দেখুন।
@ViewModelScoped
Hilt-এর সমস্ত ViewModel, ViewModelComponent দ্বারা সরবরাহ করা হয়, যা একটি ViewModel মতোই জীবনচক্র অনুসরণ করে এবং সেই কারণে কনফিগারেশন পরিবর্তন সত্ত্বেও টিকে থাকতে পারে। কোনো নির্ভরতাকে একটি ViewModel মধ্যে সীমাবদ্ধ করতে @ViewModelScoped অ্যানোটেশনটি ব্যবহার করুন।
@ViewModelScoped টাইপ ব্যবহার করলে ViewModel এ ইনজেক্ট করা সমস্ত ডিপেন্ডেন্সিতে স্কোপড টাইপের একটিমাত্র ইনস্ট্যান্স সরবরাহ করা হয়। ViewModel-এর অন্যান্য ইনস্ট্যান্স, যারা স্কোপড ইনস্ট্যান্সটির জন্য অনুরোধ করে, তারা একটি ভিন্ন ইনস্ট্যান্স পাবে।
যদি একটিমাত্র ইনস্ট্যান্সকে বিভিন্ন ViewModel-এর মধ্যে শেয়ার করার প্রয়োজন হয়, তাহলে সেটিকে @ActivityRetainedScoped অথবা @Singleton ব্যবহার করে স্কোপ করা উচিত।
জেটপ্যাক নেভিগেশন লাইব্রেরির সাথে ইন্টিগ্রেশন
আপনার Gradle ফাইলে নিম্নলিখিত অতিরিক্ত নির্ভরতাগুলি যোগ করুন:
অ্যাপ/বিল্ড.গ্রেডল
কোটলিন
dependencies { ... implementation("androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0") }
গ্রুভি
dependencies { ... implementation 'androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0' }
Jetpack Compose-এ, Navigation Compose এবং Navigation 3 উভয় লাইব্রেরিই বর্তমান নেভিগেশন গন্তব্যের জন্য নির্দিষ্ট একটি ViewModel স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করতে hiltViewModel ফাংশনটি ব্যবহার করে।
নেভিগেশন ৩-এ, নেভিগেশন গন্তব্যস্থলগুলো NavEntry দ্বারা নির্দেশিত হয়। rememberViewModelStoreNavEntryDecorator ব্যবহার করে ViewModel-গুলোকে NavEntry এর স্কোপে আনুন । সংশ্লিষ্ট ViewModel-টি পাওয়ার জন্য সেই NavEntry প্রোভাইডারের ভেতরে hiltViewModel ব্যবহার করুন।
NavDisplay(..., entryDecorators = listOf(..., rememberViewModelStoreNavEntryDecorator()), entryProvider = entryProvider { entry{ key -> val viewModel = hiltViewModel () MyScreen(viewModel = viewModel) } } )
নেভিগেশন কম্পোজে, ভিউমডেলগুলো স্বয়ংক্রিয়ভাবে নেভিগেশন গন্তব্যস্থলের স্কোপে অন্তর্ভুক্ত হয়। আরও তথ্যের জন্য, হিল্ট এবং নেভিগেশন দেখুন।
val viewModel = hiltViewModel()
হিল্ট দিয়ে ওয়ার্কম্যানেজার ইনজেক্ট করুন
আপনার Gradle ফাইলে নিম্নলিখিত অতিরিক্ত ডিপেন্ডেন্সিগুলো যোগ করুন। মনে রাখবেন যে লাইব্রেরিটির পাশাপাশি, আপনাকে একটি অতিরিক্ত অ্যানোটেশন প্রসেসর অন্তর্ভুক্ত করতে হবে যা Hilt অ্যানোটেশন প্রসেসরের উপরে কাজ করে:
অ্যাপ/বিল্ড.গ্রেডল
কোটলিন
dependencies { implementation("androidx.hilt:hilt-work:1.0.0") // When using Kotlin. ksp("androidx.hilt:hilt-compiler:1.3.0") }
গ্রুভি
dependencies { ... implementation 'androidx.hilt:hilt-work:1.0.0' // When using Kotlin. ksp 'androidx.hilt:hilt-compiler:1.3.0' }
ক্লাসে @HiltWorker অ্যানোটেশন এবং Worker অবজেক্টের কনস্ট্রাক্টরে @AssistedInject ব্যবহার করে একটি Worker ইনজেক্ট করুন। আপনি Worker অবজেক্টে শুধুমাত্র @Singleton বা আনস্কোপড বাইন্ডিং ব্যবহার করতে পারবেন। এছাড়াও আপনাকে Context এবং WorkerParameters ডিপেন্ডেন্সিগুলোকে @Assisted দিয়ে অ্যানোটেট করতে হবে।
@HiltWorker class ExampleWorker @AssistedInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
এরপর, আপনার Application ক্লাসকে Configuration.Provider ইন্টারফেসটি ইমপ্লিমেন্ট করান, HiltWorkFactory এর একটি ইনস্ট্যান্স ইনজেক্ট করুন, এবং সেটিকে WorkManager কনফিগারেশনে নিম্নরূপে পাস করুন:
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }