当前位置: 代码迷 >> 综合 >> Android Dagger2入门+注意事项
  详细解决方案

Android Dagger2入门+注意事项

热度:91   发布时间:2023-12-12 18:52:37.0

dagger2s是一个IOC容器框架(即我自己做的事,变成第三方来做)。

添加依赖:dependencies {
    implementation 'com.google.dagger:dagger:2.x'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
}

Module提供对象,Component用于注入对象,Class/Activity使用对象。

源码举例
编写实体类:
public class Student {
}
编写Module类:
@Module
public class StudentModule {
    @Provides
    public Student providerStudent(){
        return new Student();
    }
}
编写Component类:
@Component(modules = {StudentModule.class})
public interface StudentComponent {
    Student providerStudent();
}
Activity中进行调用:
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "DaggerActivity";

    @Inject
    Student student;

    @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());
    }

注意事项:
一个Model可以注入多个Component中。
一个Component可以注入多个Activity/Class中。
一个Activity/Class只能依赖一个Component;如果依赖多个,需要添加dependencies,变相进行依赖传递。
局部单例:使用@Singleton注解;复杂的依赖传递可以使用自定义的Singleton的别名。
全局单例:在自定义Application中添加依赖,全局使用。


 

  相关解决方案