Dagger2: внедрение класса базы данных в модель MVP паттерна Android - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь разработать приложение для Android, используя шаблон MVP и dagger2 для DI. Я относительно новичок в DI.

Пока у меня есть ApplicationComponent.java:

@Singleton
@Component(modules = [ApplicationModule::class])
interface ApplicationComponent {
    fun getApplication(): MyApplication

    fun getDatabase(): MyDatabase
}

, обеспечивающий MyDatabase, который является оберткой базы данных и является единичным приложением.

То, что я хочу, это иметь возможность делать это в моей модели:

class MyModel {
    fun save() {
        myDatabase.save()
    }
}

, поэтому вызывайте одноэлементный экземпляр myDatabase для сохранения модели.

Первая идея состояла в том, чтобы создать компонент, который предоставляет новый экземпляр каждой модели, которую я хочу, передавая myDatabase в качестве зависимости и заканчивая чем-то вроде этого:

@Component(dependency = ApplicationComponent::class)
interface ApplicationComponent {
    fun getMyModel(): MyModel
}
class MyModel @Inject constructor(val myDatabase: MyDatabase) {
    fun save() {
        myDatabase.save()
    }
}

но я не уверен, что это правильный подход, потому что каждый раз, когда мне нужно создать новую модель, я должен создать экземпляр ModelComponent и получить ApplicationComponent.

Есть ли у вас какие-либо предложения, как получить myDatabase в каждой модели?

...