Android

Özel ViewModel / AndroidViewModel Fabrika Oluşturma için ViewModelProvider.Factory Arayüzünü Uygulayın

Bir önceki yazımda – ViewModel veya AndroidViewModel Oluşturmanın Önerilen Yollarıoluşturmak için bahsettiğim ViewModeluzanan bir fabrika oluşturmamız gerekiyor. ViewModelProvider.NewInstanceFactory() ve yaratmak AndroidViewModeluzatmamız gerekiyor ViewModelProvider.AndroidViewModelFactory().

Şey, işe yarıyor ama öyle gereksiz. sadece uygulayabiliriz ViewModelPrvoider.Factory her ikisi için doğrudan arayüz.

ViewModelProvider.NewInstanceFactory()

class MyViewModelFactory(private val repository: Repository)
    : ViewModelProvider.NewInstanceFactory() {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {

        if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
            return MyViewModel(repository) as T
        }

        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

ViewModelProvider.Factory ile değiştirilebilir

class MyViewModelFactory(private val repository: Repository)
    : ViewModelProvider.Factory {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {

        if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
            return MyViewModel(repository) as T
        }

        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

ViewModelProvider.AndroidViewModelFactory(app)

class MyAndroidViewModelFactory(
    private val app: Application,
    private val repository: Repository)
    : ViewModelProvider.AndroidViewModelFactory(app) {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {

        if (modelClass.isAssignableFrom(
                MyAndroidViewModel::class.java)) {

            return MyAndroidViewModel(app, repository) as T
        }

        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

ViewModelProvider.Factory ile değiştirilebilir

class MyAndroidViewModelFactory(
    private val app: Application,
    private val repository: Repository)
    : ViewModelProvider.Factory {

    override fun <T : ViewModel?> create(modelClass: Class<T>): T {

        if (modelClass.isAssignableFrom(
                MyAndroidViewModel::class.java)) {

            return MyAndroidViewModel(app, repository) as T
        }

        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

İkisinden beri ViewModelProvider.NewInstanceFactory()ve ViewModelProvider.AndroidViewModelFactory() uygulamakViewModelPrvoider.Factory arayüzü, sadece uygulayabiliriz ViewModelPrvoider.Factory özel oluşturmak için doğrudan arayüz ViewModel / AndroidViewModel farklı yapıcı parametreleri alan fabrika. Burada ek bir katmana ihtiyacımız yok.

Bu arada, aldığım geri bildirim bu orta başka bir daha iyi yaklaşımı önermek kullanmaktır Hilt Bağımlılık Enjeksiyonu özel oluşturmak için fabrikayı kullanmak yerine ViewModelolarak da bilinen yapıcı bağımlılık enjeksiyonu.

Şahsen Hilt’i henüz kullanmadım ve kesinlikle öğrenip blog yazacağım.

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu