Dagger 子组件(dependencies)

2023-07-17  本文已影响0人  coke613
在Dagger 中,可以创建一个组件的层次结构,其中子组件可以依赖父组件.

通过dependencies 参数来实现组件层次结构.

dependencies参数是@ Component 注解的参数.


// ApplicationCommponent 作为父组件

@Singleton
@Component(modules = NetWorkModule.class)
public interface ApplicationCommponent {

//    void injectUser(TextDaggerActivity mainActivity);

    Retrofit getRetrofit();
}
@Module
public class NetWorkModule {
    @Provides
    @Singleton
    public Retrofit provideRetrofit(){
        return new Retrofit.Builder()
                .baseUrl("https://www.google.com")
                .build();
    }
    @Singleton  
    @Provides
    public Api providesApi(Retrofit retrofit){
        return retrofit.create(Api.class);
    }

}

创建子组件, 通过dependencies 指向了ApplicationCommponent.class

@UserScoped
@Component(modules = UserModule.class,dependencies = ApplicationCommponent.class)
public interface UserCommponent {
    void inject(TextDaggerActivity activity);
}

UserModule.java

@Module
public class UserModule {
   @UserScoped
   @Provides
   public User provideUser(){
      return new User();
   }
}

User.java

public class User {
   public User(){
   }
}

自定义注解接口,用于区分父组件作用域.

@Scope
@Documented
@Retention(RUNTIME)
public @interface UserScoped {
}

获取子组件实例

public class TextDaggerActivity extends AppCompatActivity {

   @Inject
   Retrofit retrofit1;

   @Inject
   User user;

   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      DaggerUserCommponent.builder().applicationCommponent(App.applicationCommponent).build().inject(this);

      Log.e("retrofit1----","address: "+retrofit1);
      Log.e("user----","address: "+user);
   }
}

打印结果

E/retrofit1----: address: retrofit2.Retrofit@5707fc6
E/user----: address: com.zh.hellokotlin.dagger.bean.User@f8eb87

使用dependencie需要注意的点

获取子容器实例需要使用 DaggerXXX.builder().父组件容器(父组件容器实例).build().函数();

上一篇下一篇

猜你喜欢

热点阅读