소스 검색

bug fix DI for viewModel

MrOzOn 5 년 전
부모
커밋
d8089e200c

+ 2 - 2
app/src/main/java/com/mrozon/healthdiary/di/FacadeComponent.kt

@@ -6,12 +6,12 @@ import com.mrozon.core_api.db.DatabaseProvider
 import com.mrozon.core_api.network.NetworkProvider
 import com.mrozon.core_api.providers.AppProvider
 import com.mrozon.core_api.providers.ProvidersFacade
-import com.mrozon.core_api.viewmodel.ViewModelsProvider
+import com.mrozon.core_api.viewmodel.ViewModelsFactoryProvider
 import com.mrozon.healthdiary.App
 import dagger.Component
 
 @Component(
-    dependencies = [AppProvider::class, ViewModelsProvider::class, DatabaseProvider::class, NetworkProvider::class]
+    dependencies = [AppProvider::class, DatabaseProvider::class, NetworkProvider::class]
 )
 interface FacadeComponent : ProvidersFacade {
 

+ 0 - 2
core/src/main/java/com/mrozon/core/CoreProvidersFactory.kt

@@ -1,10 +1,8 @@
 package com.mrozon.core
 
-import androidx.lifecycle.ViewModelProvider
 import com.mrozon.core_api.db.DatabaseProvider
 import com.mrozon.core_api.network.NetworkProvider
 import com.mrozon.core_api.providers.AppProvider
-import com.mrozon.core_api.viewmodel.ViewModelsProvider
 import com.mrozon.core_impl.db.DaggerDatabaseComponent
 import com.mrozon.core_impl.network.DaggerNetworkComponent
 

+ 1 - 2
core_api/src/main/java/com/mrozon/core_api/viewmodel/ViewModelsProvider.kt → core_api/src/main/java/com/mrozon/core_api/viewmodel/ViewModelsFactoryProvider.kt

@@ -1,9 +1,8 @@
 package com.mrozon.core_api.viewmodel
 
-import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 
-interface ViewModelsProvider {
+interface ViewModelsFactoryProvider {
 
     fun provideViewModel(): ViewModelProvider.Factory
 }

+ 0 - 11
core_impl/src/main/java/com/mrozon/core_impl/viewmodel/ViewModelFactoryModule.kt

@@ -1,11 +0,0 @@
-package com.mrozon.core_impl.viewmodel
-
-import androidx.lifecycle.ViewModelProvider
-import dagger.Binds
-import dagger.Module
-
-@Module
-abstract class ViewModelFactoryModule {
-    @Binds
-    abstract fun bindViewModelFactory(viewModelFactory: DaggerViewModelFactory): ViewModelProvider.Factory
-}

+ 1 - 3
core_impl/src/main/java/com/mrozon/core_impl/viewmodel/DaggerViewModelFactory.kt → feature_splash/src/main/java/com/mrozon/feature_splash/di/DaggerViewModelFactory.kt

@@ -1,6 +1,4 @@
-@file:Suppress("UNCHECKED_CAST")
-
-package com.mrozon.core_impl.viewmodel
+package com.mrozon.feature_splash.di
 
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider

+ 33 - 0
feature_splash/src/main/java/com/mrozon/feature_splash/di/SplashFragmentComponent.kt

@@ -0,0 +1,33 @@
+package com.mrozon.feature_splash.di
+
+import com.mrozon.core_api.providers.AppWithFacade
+import com.mrozon.core_api.providers.ProvidersFacade
+import com.mrozon.core_api.viewmodel.ViewModelsFactoryProvider
+import com.mrozon.feature_splash.presentation.SplashFragment
+import dagger.Component
+
+//@Singleton
+@Component(
+    modules = [SplashFragmentModule::class],
+    dependencies = [ProvidersFacade::class]
+)
+interface SplashFragmentComponent: ViewModelsFactoryProvider {
+
+    companion object {
+
+        fun create(providersFacade: ProvidersFacade): SplashFragmentComponent {
+            return DaggerSplashFragmentComponent.builder()
+                .providersFacade(providersFacade)
+                .build()
+        }
+
+        fun injectFragment(fragment: SplashFragment): SplashFragmentComponent  {
+            val component = create((fragment.activity?.application
+                as AppWithFacade).getFacade())
+            component.inject(fragment)
+            return component
+        }
+    }
+
+    fun inject(fragment: SplashFragment)
+}

+ 7 - 3
feature_splash/src/main/java/com/mrozon/feature_splash/presentation/di/SplashFragmentModule.kt → feature_splash/src/main/java/com/mrozon/feature_splash/di/SplashFragmentModule.kt

@@ -1,6 +1,7 @@
-package com.mrozon.feature_splash.presentation.di
+package com.mrozon.feature_splash.di
 
 import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
 import com.mrozon.core_api.viewmodel.ViewModelKey
 import com.mrozon.feature_splash.presentation.SplashFragmentViewModel
 import dagger.Binds
@@ -8,9 +9,12 @@ import dagger.Module
 import dagger.multibindings.IntoMap
 
 @Module
-abstract class SplashFragmentModule {
+interface SplashFragmentModule {
     @Binds
     @IntoMap
     @ViewModelKey(SplashFragmentViewModel::class)
-    abstract fun bindViewModel(viewmodel: SplashFragmentViewModel): ViewModel
+    fun bindViewModel(viewmodel: SplashFragmentViewModel): ViewModel
+
+    @Binds
+    fun viewModelFactory(factory: DaggerViewModelFactory): ViewModelProvider.Factory
 }

+ 6 - 17
feature_splash/src/main/java/com/mrozon/feature_splash/presentation/SplashFragment.kt

@@ -10,7 +10,7 @@ import androidx.lifecycle.ViewModelProviders
 import com.mrozon.core_api.providers.AppWithFacade
 import com.mrozon.feature_splash.R
 import com.mrozon.feature_splash.databinding.FragmentSplashBinding
-import com.mrozon.feature_splash.presentation.di.SplashFragmentComponent
+import com.mrozon.feature_splash.di.SplashFragmentComponent
 import com.mrozon.utils.base.BaseFragment
 import javax.inject.Inject
 
@@ -21,27 +21,16 @@ class SplashFragment : BaseFragment<FragmentSplashBinding>() {
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
-    private lateinit var viewModel: SplashFragmentViewModel
-//    private val viewModel by viewModels<SplashFragmentViewModel> { viewModelFactory }
+    private val viewModel by viewModels<SplashFragmentViewModel> { viewModelFactory }
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         viewModel.blaaa()
     }
 
-//    override fun onAttach(context: Context) {
-//        super.onAttach(context)
-//        SplashFragmentComponent.create((requireActivity().application as AppWithFacade).getFacade())
-//            .inject(this)
-////        viewModel = ViewModelProviders.of(this, viewModelFactory).get(HomeViewModel::class.java)
-//        viewModel = ViewModelProviders.of(this,viewModelFactory).get(SplashFragmentViewModel::class.java)
-//    }
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        SplashFragmentComponent.create((requireActivity().application as AppWithFacade).getFacade())
-            .inject(this)
-//        viewModel = ViewModelProviders.of(this, viewModelFactory).get(HomeViewModel::class.java)
-        viewModel = ViewModelProviders.of(this,viewModelFactory).get(SplashFragmentViewModel::class.java)
+    override fun onAttach(context: Context) {
+        super.onAttach(context)
+        SplashFragmentComponent.injectFragment(this)
     }
+
 }

+ 0 - 42
feature_splash/src/main/java/com/mrozon/feature_splash/presentation/di/SplashFragmentComponent.kt

@@ -1,42 +0,0 @@
-package com.mrozon.feature_splash.presentation.di
-
-import com.mrozon.core.CoreProvidersFactory
-import com.mrozon.core_api.providers.ProvidersFacade
-import com.mrozon.core_api.viewmodel.ViewModelsProvider
-import com.mrozon.feature_splash.presentation.SplashFragment
-import dagger.BindsInstance
-import dagger.Component
-import dagger.Subcomponent
-import javax.inject.Singleton
-
-//@Singleton
-@Component(
-    modules = [SplashFragmentModule::class],
-    dependencies = [ProvidersFacade::class, ViewModelsProvider::class]
-)
-interface SplashFragmentComponent {
-
-    companion object {
-
-        fun create(providersFacade: ProvidersFacade): SplashFragmentComponent {
-            return DaggerSplashFragmentComponent
-                .builder()
-                .providersFacade(providersFacade)
-//                .viewModelsProvider(CoreProvidersFactory.createViewModelBuilder())
-                .build()
-        }
-    }
-
-    fun inject(fragment: SplashFragment)
-}
-
-//@Subcomponent(modules = [SplashFragmentModule::class])
-//interface SplashFragmentComponent {
-//
-//    @Subcomponent.Factory
-//    interface Factory{
-//        fun create(): SplashFragmentComponent
-//    }
-//
-//    fun inject(fragment: SplashFragment)
-//}