Как внедрить базу данных Room во все мои ViewModels как синглтон с помощью Dagger2? ⇐ Android
Как внедрить базу данных Room во все мои ViewModels как синглтон с помощью Dagger2?
Это мой код:
@Module класс AppModule (частное приложение val: App) { @Обеспечивает весело обеспечитьApplication(): App { заявление на возврат } @Обеспечивает @Синглтон весело обеспечитьAppDatabase (приложение: Приложение): AppDatabase { вернуть AppDatabase.getInstance(приложение) } } @Синглтон @Component(modules = [AppModule::class]) интерфейс AppComponent { забавная инъекция (viewModel: MainViewModel) @Component.Builder Разработчик интерфейса { @BindsInstance забавное приложение (приложение: App): Builder забавная сборка(): AppComponent } } Класс приложения:
lateinit var appComponent: AppComponent переопределить удовольствие onCreate() { супер.onCreate() log("Проверка стабильности: App.onCreate() - запуск") AppCompatDelegate.setCompatVectorFromResourcesEnabled (истина) connMgr = getSystemService(Context.CONNECTIVITY_SERVICE) как ConnectivityManager проверитьСетьСоединенный() initNetworkConnectivityCheck() //инициализируем базу данных при запуске приложения appComponent = DaggerAppComponent.builder() .appModule(AppModule(это)) .строить() log("Проверка стабильности: App.onCreate() - конец") } MainViewModel (расширенный другими моделями представления)
открыть класс MainViewModel @Inject конструктор(private val appComponent: AppComponent): ViewModel() {...} ??? что здесь делать? Мне все еще нужно передать appComponent в ViewModelFactory внутри моего Fragment.
класс RegistrationViewModel(): MainViewModel() { ... } Теперь как мне получить доступ к appComponent во всех расширенных моделях представления как синглтон?
Я хотел использовать здесь Dagger, чтобы попробовать внедрение зависимостей, но я не понимаю, какой это лучший подход, если я могу просто поместить весь экземпляр класса Application в конструктор любой ViewModel при инициализации (например, во фрагменте).
Это мой код:
@Module класс AppModule (частное приложение val: App) { @Обеспечивает весело обеспечитьApplication(): App { заявление на возврат } @Обеспечивает @Синглтон весело обеспечитьAppDatabase (приложение: Приложение): AppDatabase { вернуть AppDatabase.getInstance(приложение) } } @Синглтон @Component(modules = [AppModule::class]) интерфейс AppComponent { забавная инъекция (viewModel: MainViewModel) @Component.Builder Разработчик интерфейса { @BindsInstance забавное приложение (приложение: App): Builder забавная сборка(): AppComponent } } Класс приложения:
lateinit var appComponent: AppComponent переопределить удовольствие onCreate() { супер.onCreate() log("Проверка стабильности: App.onCreate() - запуск") AppCompatDelegate.setCompatVectorFromResourcesEnabled (истина) connMgr = getSystemService(Context.CONNECTIVITY_SERVICE) как ConnectivityManager проверитьСетьСоединенный() initNetworkConnectivityCheck() //инициализируем базу данных при запуске приложения appComponent = DaggerAppComponent.builder() .appModule(AppModule(это)) .строить() log("Проверка стабильности: App.onCreate() - конец") } MainViewModel (расширенный другими моделями представления)
открыть класс MainViewModel @Inject конструктор(private val appComponent: AppComponent): ViewModel() {...} ??? что здесь делать? Мне все еще нужно передать appComponent в ViewModelFactory внутри моего Fragment.
класс RegistrationViewModel(): MainViewModel() { ... } Теперь как мне получить доступ к appComponent во всех расширенных моделях представления как синглтон?
Я хотел использовать здесь Dagger, чтобы попробовать внедрение зависимостей, но я не понимаю, какой это лучший подход, если я могу просто поместить весь экземпляр класса Application в конструктор любой ViewModel при инициализации (например, во фрагменте).
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение