Я пытаюсь разработать приложение для 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
в каждой модели?