Middle+
როგორ შევიტანოთ ViewModel Dagger Hilt-ის გამოყენებით?
sobes.tech AI
პასუხი AI-სგან
@HiltViewModel ඇතුළත් කිරීම සහ @ActivityRetainedScoped හෝ @ViewModelScoped යන ඇතුළත් කිරීම් සමඟ ViewModel එකට සහ එවැනි ViewModel හෝ ක්රියාකාරකම සමඟ ජීවිත කාලය ගතවන ආශ්රිතතා සඳහා භාවිතා වේ. ආශ්රිතතා @Inject සමඟ නිර්මාණකරු මඟින් ආදානය කරයි.
// ViewModel නිර්වචනය
@HiltViewModel
class MyViewModel @Inject constructor(
private val myRepository: MyRepository // නිර්මාණකරු මඟින් ආදානය
) : ViewModel() {
// ViewModel තර්කය
}
// ආශ්රිතතා (Repository) ප්රකාශනය
@ActivityRetainedScoped // උදාහරණ සීමාව
class MyRepository @Inject constructor() {
// රිපොසිටරිය තර්කය
}
Activity හෝ Fragment එකක, ViewModel එක viewModels() හෝ activityViewModels() delegate මඟින් ලබා ගනී:
// Activity එකේ
@AndroidEntryPoint // Hilt-අංග සඳහා ඇතුළත් කිරීම
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels() // delegate මඟින් ViewModel ලබා ගැනීම
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// viewModel භාවිතා කිරීම
}
}
// Fragment එකේ
@AndroidEntryPoint // Hilt-අංග සඳහා ඇතුළත් කිරීම
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // මෙම fragment සඳහා ViewModel ලබා ගැනීම
// හෝ
// private val activityViewModel: MyViewModel by activityViewModels() // ක්රියාකාරකම සමඟ සම්බන්ධ ViewModel ලබා ගැනීම
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// viewModel භාවිතා කිරීම
}
}
MyRepository සඳහා අවශ්ය ආශ්රිතතා (උදාහරණයක් ලෙස, MyRepository ලබා දීම සඳහා modules) Hilt modules තුළ සැකසිය යුතුය.
// Hilt module එකේ උදාහරණයක්
@Module
@InstallIn(SingletonComponent::class) // SingletonComponent තුළ module ස්ථාපිත කිරීම
object RepositoryModule {
@Provides
@Singleton // singleton scope උදාහරණයක්
fun provideMyRepository(): MyRepository {
return MyRepository() // MyRepository උදාහරණය ලබා දීම
}
}