anahí salgado³n-de... · dagger hilt apply plugin: 'kotlin-kapt' build.gradle(:app)...
Post on 03-Aug-2020
30 Views
Preview:
TRANSCRIPT
Anahí Salgado@anncode
Inyección de DependenciasDagger Hilt
@anncode
Dagger
@anncode
Inyección de Dependencias
@anncode
Inyección de Dependencias
Para que un objeto exista necesita la existencia de otro u otros
@anncode
Inyección de Dependencias
Para que un objeto exista necesita la existencia de otro u otros
@anncode
Inyección de dependencias
Agenda
✔
@anncode
Inyección de dependencias
Agenda- Contact
✔
@anncode
Inyección de dependencias
Agenda- contacts: List<Contact>- type: String
✔
Contact- name: String- phone: String
@anncode
Inyección de dependencias
Agenda- contacts: List<Contact>- type: String
✔
Contact- name: String- phone: StringPara que un objeto exista
necesita la existencia de otro u otros @anncode
Inyección de dependenciaAgendaFriends
✔
@anncode
Inyección de dependenciaAgendaFriends
✔
AgendaFamily
@anncode
Inyección de dependenciaAgendaFriends
✔
AgendaFamily
AgendaTeamWork
@anncode
Inyección de Dependencias
Tratamos que los objetos no dependan tanto entre ellos para hacer más flexible los sistemas
@anncode
Inyección de dependencias
data class Agenda(val type: String, val contacts: List<Contact>)
✔
@anncode
Inyección de dependencias
data class Agenda(val type: String, val contacts: List<Contact>)
✔
@anncode
Inyección de dependencias
data class Agenda(val type: String, val contacts: List<Contact>)
✔
@anncode
Inyección de dependencias
data class Agenda(val type: String, val contacts: List<Contact>)
✔Inyectar
@anncode
Inyección de Dependencias
Reutilización de código
@anncode
Inyección de dependencias
data class Agenda(val type: String, val contacts: List<Contact>)
✔
@anncode
Dagger
@anncode
DaggerKoin
@anncode
DaggerKoin
Dagger Hilt@anncode
Dagger Hilt
@anncode
Dagger Hiltapply plugin: 'kotlin-kapt' build.gradle(:app)
apply plugin: 'dagger.hilt.android.plugin'
dependencies { def hilt_version = "2.28-alpha"
// Dagger Hilt implementation "com.google.dagger:hilt-android:$hilt_version" kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
}
dependencies { build.gradle(project) classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
} @anncode
Dagger Hilt
@HiltAndroidAppopen class MyApplication: Application()
@anncode
Dagger Hilt
@HiltAndroidAppopen class MyApplication: Application()
AndroidManifest.xml
<application android:name=".MyApplication"
@anncode
Dagger Hilt
@anncode
Dagger Hilt
fun provideListContacts(): List<Contact> {
@anncode
Dagger Hilt
@Providesfun provideListContacts(): List<Contact> {
@anncode
Dagger Hilt
@Providesfun provideListContacts(): List<Contact> {
@Providesfun providesAgenda(contacts: List<Contact>): Agenda
@anncode
Dagger Hilt
class AgendaModule {
@anncode
Dagger Hilt
class AgendaModule {
@anncode
Dagger Hilt
@Moduleclass AgendaModule {
@anncode
Dagger Hilt
@anncode
Dagger Hilt
@Moduleclass AgendaModule {
Scope
@anncode
Dagger Hilt
@Module@InstallIn(ApplicationComponent::class)class AgendaModule {
Scope
@anncode
Dagger Hilt@Module@InstallIn(ApplicationComponent::class)class AgendaModule {
ApplicationComponentApplication
@anncode
Dagger Hilt@Module@InstallIn(ServiceComponent::class)class AgendaModule {
ApplicationComponentApplication
ServiceComponentService
@anncode
Dagger Hilt@Module@InstallIn(ActivityRetainedComponent::class)class AgendaModule {
ApplicationComponentApplication
ServiceComponentService
ActivityRetainedComponentViewModel
@anncode
Dagger Hilt@Module@InstallIn(ActivityComponent::class)class AgendaModule {
ApplicationComponentApplication
ServiceComponentService
ActivityComponentActivity
ActivityRetainedComponentViewModel
@anncode
Dagger Hilt@Module@InstallIn(ViewComponent::class)class AgendaModule {
ApplicationComponentApplication
ServiceComponentService
ActivityComponentActivity
ViewComponent
View
ViewComponent
View
ActivityRetainedComponentViewModel
@anncode
Dagger Hilt@Module@InstallIn(FragmentComponent::class)class AgendaModule {
ApplicationComponentApplication
ServiceComponentService
ActivityComponentActivity
ViewComponent
View
ViewComponent
View
FragmentComponentFragment
FragmentComponentFragment
ActivityRetainedComponentViewModel
@anncode
Dagger Hilt ApplicationComponentApplication
ServiceComponentService
ActivityComponentActivity
ViewComponent
View
ViewComponent
View
FragmentComponentFragment
FragmentComponentFragment
ActivityRetainedComponentViewModel
@Module@InstallIn(ViewWithFragmentComponent::class)class AgendaModule {
@anncode
Dagger Hilt@Module@InstallIn(ViewWithFragmentComponent::class)class AgendaModule {
ApplicationComponentApplication
ServiceComponentService
ActivityComponentActivity
ViewComponent
View
ViewComponent
View
FragmentComponentFragment
FragmentComponentFragment
ViewWithFragment
ComponentViewFragment
ActivityRetainedComponentViewModel
@anncode
Dagger Hilt
@Module@InstallIn(ApplicationComponent::class)class AgendaModule {
@anncode
Dagger Hilt
@AndroidEntryPointclass MainActivity : AppCompatActivity() {
@anncode
Dagger Hilt
@AndroidEntryPointclass MainActivity : AppCompatActivity() {
ActivityFragmentViewServiceBroadcast Receiver
@anncode
Dagger Hilt
@AndroidEntryPointclass MainActivity : AppCompatActivity() {
@Inject lateinit var contacts: List<Contact>
@anncode
Dagger Hilt
@AndroidEntryPointclass MainActivity : AppCompatActivity() {
@Inject lateinit var contacts: List<Contact>
@Inject lateinit var agenda: Agenda
@anncode
Dagger Hilt@Inject lateinit var contacts: List<Contact>
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) contacts.forEach {
}}
@anncode
ApiService Repository
Data layer
UseCase
Domain layer
ViewModel ActivityFragment
Presentation layer
Arquitectura
@anncode
ApiService Repository
Data layer
UseCase
Domain layer
ViewModel ActivityFragment
Presentation layer
NetworkModule
provideApiService
RepositoryModule
provideXRepository
Arquitectura
@anncode
ApiService Repository
Data layer
NetworkModule
provideApiService
RepositoryModule
provideXRepository
Arquitectura
@anncode
ApiService Repository
Data layer
UseCase
Domain layer
ViewModel ActivityFragment
Presentation layer
NetworkModule
provideApiService
RepositoryModule
provideXRepository
Arquitectura
UseCaseModule
provideXUseCase
@anncode
Arquitectura
UseCase
Domain layer
UseCaseModule
provideXUseCase
@anncode
ApiService Repository
Data layer
UseCase
Domain layer
ViewModel ActivityFragment
Presentation layer
NetworkModule
provideApiService
RepositoryModule
provideXRepository
Arquitectura
UseCaseModule
provideXUseCase
ViewModelModule
provideXViewModel
@anncode
Arquitectura
ViewModel ActivityFragment
Presentation layer
ViewModelModule
provideXViewModel
@anncode
Dagger Hilt
class MainViewModel @ViewModelInject constructor( private val getCatRandomFact: GetCatRandomFact
): ViewModel() {
@anncode
Dagger Hilt
class MainViewModel @ViewModelInject constructor( private val getCatRandomFact: GetCatRandomFact
): ViewModel() {
class Factory( private val getCatRandomFact: GetCatRandomFact): ViewModelProvider.Factory {
@anncode
Dagger Hilt
class MainViewModel @ViewModelInject constructor( private val getCatRandomFact: GetCatRandomFact
): ViewModel() {
class Factory( private val getCatRandomFact: GetCatRandomFact): ViewModelProvider.Factory {
@anncode
Dagger Hilt
class MyWorkerModel @WorkerInject constructor( @Assited context: Context
): Worker() {
@anncode
Dagger Hilt
class MyWorkerModel @WorkerInject constructor( @Assited context: Context
): Worker() {
class Factory(): WorkerFactory {
@anncode
Dagger Hilt
class MyWorkerModel @WorkerInject constructor( @Assited context: Context
): Worker() {
class Factory(): WorkerFactory {
@anncode
https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67
b6031e62d@anncode
https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67
b6031e62d@anncode
https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67
b6031e62d@anncode
Anahí Salgado@anncode
top related