Projeto utilizando a framework Room com Kotlin
Projetos MVP: https://github.com/quangctkm9207/mvp-android-arch-component https://github.com/MindorksOpenSource/android-kotlin-mvp-architecture
Injeção de Dependência baseada no conceito de Inversão de Controle. O que diz que uma classe deve obter suas dependências de fora. Em palavras simples, nenhuma classe deve instanciar outra classe, mas deve obter as instâncias de uma classe de configuração.
Se uma classe java criar uma instância de outra classe através do operador new, ela não poderá ser usada e testada independentemente dessa classe e será chamada de dependência hard.
A vantagem mais importante é que aumenta a possibilidade de reutilizar a classe e poder testá-las independentemente de outras classes.
Limitações do Dagger2: Dagger2 não insere campos automaticamente. Não pode injetar campos privados. Se você quiser usar a injeção de campo, você deve definir um método na sua @Componentinterface anotada que tome a instância da classe na qual você deseja injetar a variável de membro.