dagger2s es un marco contenedor de COI (es decir, lo que hago yo mismo se convierte en un tercero).
添加 依赖 : dependencias {
implementación 'com.google.dagger: dagger: 2.x'
annotationProcessor 'com.google.dagger: dagger-compiler: 2.x'
}
El módulo proporciona objetos, el componente se usa para inyectar objetos y la clase / actividad usa objetos.
Ejemplo de código fuente
Clase de entidad de escritura: clase
pública Student {
}
Clase de módulo de escritura:
@Module
clase pública StudentModule {
@Provides
public Student providerStudent () {
return new Student ();
}
}
Clase de componente de escritura:
@Component (modules = {StudentModule.class })
interfaz pública StudentComponent {
Student providerStudent ();
}
Llamada en Actividad:
clase pública MainActivity extiende AppCompatActivity {
private static final String TAG = "DaggerActivity";
@Inject
Estudiante estudiante;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
DaggerStudentComponent.create (). InjectMainActivity (this);
// StudentComponent studentComponent = DaggerStudentComponent.builder ()
// .teacherModule (new TeacherModule ())
// .build ();
// teacherComponent.injectMainActivity (this);
Log.i (TAG, "onCreate: student =" + student.hashCode ());
}
Nota:
Un modelo puede inyectarse en múltiples componentes.
Un componente puede inyectarse en múltiples actividades / clases.
Una actividad / clase solo puede depender de un componente; si depende de más de uno, debe agregar dependencias y pasar las dependencias disfrazadas
Singleton local: use la anotación @Singleton; la entrega de dependencias complejas puede usar un alias Singleton personalizado.
Singleton global: agregue dependencia en la aplicación personalizada para uso global.