Anahí Salgado³n-de... · Dagger Hilt apply plugin: 'kotlin-kapt' build.gradle(:app) apply plugin:...

Post on 03-Aug-2020

37 views 0 download

Transcript of Anahí Salgado³n-de... · Dagger Hilt apply plugin: 'kotlin-kapt' build.gradle(:app) apply plugin:...

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

Anahí Salgado@anncode