美文网首页
Dagge 入门使用.

Dagge 入门使用.

作者: coke613 | 来源:发表于2023-07-16 16:54 被阅读0次
    使用流程.png

    引入依赖

    dependencies {
      implementation 'com.google.dagger:dagger-android:2.x'
      implementation 'com.google.dagger:dagger-android-support:2.x' // if you use the support libraries
      annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'
      annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
    }
    

    使用构造方法注入 @Inject

    public class User {
      // 步骤一 创建User 类, 并使用@Inject 注解,通过dagger2 通过构造方法注入实例.
      @Inject
       public User(){
       }
    }
    
    

    创建创建Component 组件

    // 步骤二, 是一个接口. 执行注入动作.
    @Component()
    public interface UserCommponent {
      //  参数 ,指定要注入的目标类, 也就是Activity.
        void inject(TextDaggerActivity activity);
    }
    
    

    声明/使用注入对象

      // 第三步, 使用user类.
       @Inject
       User user;
    
      @Override
       protected void onCreate(@Nullable Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
    
         // 第四步, 执行注入动作.
        DaggerUserCommponent.create().inject(this);
        Log.e("TextDaggerActivity user: ",user + "  ");
    }
    
    // E/----: address: com.zh.hellokotlin.dagger.bean.User@5707fc6
    

    使用模块方法注入 @Module

    在一些复杂的情况下需要Module的方式来实例化对象.这里模拟网络请求.

    public  interface Api {
        @POST("/api/v1/login")
        Call<String> login();
    }
    
    

    步骤一 创建Module 类

    // 主要注意类名, 使用@Module 注解.
    @Module
    public class NetWorkModule {
    
      // 使用Provides 注解实例化对象, 函数一般以provide开头,返回对象本身.
        @Provides
        public Retrofit provideRetrofit(){
            return new Retrofit.Builder()
                    .baseUrl("https://www.google.com")
                    .build();
        }
    
        @Provides
        public Api providesApi(Retrofit retrofit){
            return retrofit.create(Api.class);
        }
    }
    

    步骤二 创建Component组件,使用Module.

    @Component(modules = NetWorkModule.class)
    public interface ApplicationCommponent {
    
        void inject(TextDaggerActivity mainActivity);
    }
    
    

    使用Retrofit实例

     @Inject
     Retrofit retrofit;
    
      @Override
      protected void onCreate(@Nullable Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
    
         // 需要执行注入动作! 并且在使用变量之前!
         DaggerApplicationCommponent.create(). inject(this);
    
          Log.e("----","address: "+user);
    
          Log.e("retrofit----","address: "+retrofit);
       }
    
    
    // E/----: address: com.zh.hellokotlin.dagger.bean.User@5707fc6
    // E/retrofit----: address: retrofit2.Retrofit@f8eb87
    
    • @Module : 表示这个类的类型,便于注入到容器中.
    • @Provides : 这个注解用到了函数上,主要是用于创建对象.
    • @Component : 是一个接口,参数modules接收的类型是一个数组,表示被装入容器的Module有那些. 函数 inject(XX xx),表示这个容器中的功能对象,比如Retrofit,Api, 可以在XX类中使用.

    相关文章

      网友评论

          本文标题:Dagge 入门使用.

          本文链接:https://www.haomeiwen.com/subject/jrkwudtx.html