Dagger 2 es elemental (Parte 1)

Contenido

  1. Introduccion
  2. ¿Qué es la inyección de dependencia? Ejemplo de dependencia
  3. Daga 2 - Introducción
  4. Primer uso de Dagger 2

Introduccion


El artículo no está escrito por un programador avanzado para las mismas palabras, ordinarias y comprensibles.
Este artículo utiliza el código de muestra de Kotlin. Daga versión 2.17. Se puede descargar un ejemplo al final del artículo.

¿Qué es la inyección de dependencia?


La inyección de dependencia (inyección o inyección de dependencia) es la dependencia de una clase sobre otra. es decir Para la operación completa de una clase, se necesita la inicialización de la otra (su) clase.

Por ejemplo, la clase Car (car) no puede funcionar sin la clase Engine, que a su vez no puede funcionar sin la clase Fuel. Se ve así:

class Car(private var engine: Engine) class Engine ( private var fuel: Fuel) class Fuel(){ private val fuel = if(BuildConfig.DEBUG){ “benzine” } else { “diesel” } } 

En este ejemplo, la clase Car depende de la clase Engine, y eso a su vez depende de la clase Fuel.

Daga 2 - Introducción


Dagger es una biblioteca que ayuda a implementar la inyección de dependencia:. Esta es una biblioteca de google. La documentación detallada está disponible aquí .

Ventajas de la daga:

  • Tengo que escribir menos código repetitivo.
  • Ayuda a estructurar dependencias.
  • Simplifica enormemente el trabajo cuando hay muchas dependencias
  • El código se vuelve fácil de leer.

Contras de la daga:

  • Falta de documentación detallada
  • Dagger intenta comprender las intenciones del desarrollador utilizando anotaciones. Se complica cuando no te entiende correctamente
  • Daga genera código que es tan difícil de detectar

Primer uso de Dagger 2


En primer lugar, debe agregar una daga a la aplicación. Conozco 2 métodos para hacerlo.
1. Abra build.gradle (Aplicación) y agregue un rastro.

1.1 En la parte superior de la sección de declaración del complemento

 apply plugin: 'kotlin-kapt' 

1.2 en la sección de dependencias

 { ... kapt "com.google.dagger:dagger-compiler:$dagger_version" implementation "com.google.dagger:dagger:$dagger_version" } 

Especifico la versión de dagger (dagger_version) en la sección

 ext { dagger_version = '2.17' } 

Si este no es el caso, la sección debe agregarse sobre la sección de Android.

2. Agregue el repositorio de Maven a través de la Estructura del proyecto - Dependencias - Agregue dependencias de la biblioteca

Después de sincronizar el proyecto, estamos listos para implementar dependencias usando dagger.

Primero, cree las clases Coche, Motor y Combustible:

 class Car constructor(private var engine: Engine) class Engine constructor(private var fuel: Fuel) class Fuel { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } } 

Antes de los constructores de las clases Car, Engine y Fuel, agregamos la anotación Dagger Inject, permitiendo que Dagger entienda que estas clases deben implementarse si es necesario. Obtenemos el rastro.

 class Car @Inject constructor(private var engine: Engine) class Engine @Inject constructor(private var fuel: Fuel) class Fuel @Inject constructor() { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } } 

Dagger necesita saber cómo crear todos los objetos que necesita implementar. Para enumerar todas las clases que implementamos (Inject), se usa la anotación Component , que se declara para la interfaz (DaggerComponent).

Se ve así:

 @Component interface DaggerComponent { fun getCar(): Car fun getEngine(): Engine fun getFuel(): Fuel } 

Al declarar los métodos componentes, no son los nombres de los métodos los que son importantes, sino la clase que devuelven.

En este paso, debe crear un proyecto (Build - Rebuild project). Después de eso, la daga generará las clases y la fábrica necesarias para inicializar los componentes. El nombre de la fábrica coincidirá con el nombre de la interfaz en la que inicializamos las clases para la daga, excepto que se agregará el prefijo "Daga", es decir. en la salida, obtenemos la clase DaggerDaggerComponent.

 // Generated by Dagger (https://google.imtqy.com/dagger). package com.example.dagger2; public final class DaggerDaggerComponent implements DaggerComponent { private DaggerDaggerComponent(Builder builder) {} public static Builder builder() { return new Builder(); } public static DaggerComponent create() { return new Builder().build(); } @Override public Car getCar() { return new Car(getEngine()); } @Override public Engine getEngine() { return new Engine(new Fuel()); } @Override public Fuel getFuel() { return new Fuel(); } public static final class Builder { private Builder() {} public DaggerComponent build() { return new DaggerDaggerComponent(this); } } } 

Todo esta listo. Intentemos crear un campo de coche del tipo Coche en MainActivity:

 private var car: Car = DaggerDaggerComponent.create().getCar() 

Al iniciar la aplicación, puede asegurarse de que el campo del automóvil se inicialice al acceder a él.

Código fuente

Source: https://habr.com/ru/post/466725/


All Articles