dagger2之dagger-android简单使用

dagger2的使用便利我就不用说了,google为方便android开发者进而推出了dagger-android,这里附录官方文档:[https://google.github.io/dagger/android.html]
需要增加依赖:

  compile 'com.google.dagger:dagger:' + dagger_version
  compile "com.google.dagger:dagger-android:$dagger_version"
  annotationProcessor 'com.google.dagger:dagger-compiler:' + dagger_version
  compile "com.google.dagger:dagger-android-support:$dagger_version"
  1. 注入Activity 对象
    1.1 在你的Component类中增加声明modules={ AndroidInjectionModule.class}
    1.2 申明注解@Subcomponent,并继承自AndroidInjectror,并声明@Subcomponent.Builder:
@Subcomponent(modules = ...)
public interface YourActivitySubcomponent extends AndroidInjector<YourActivity> {
  @Subcomponent.Builder
  public abstract class Builder extends AndroidInjector.Builder<YourActivity> {}
}

1.3 定义一个与subcomponent绑定的module A,并且使A module与1.2定义的subcomponent绑定,最后把A module添加到已经注入了application的YourApplicationComponent中

@Module(subcomponents = YourActivitySubcomponent.class)
abstract class YourActivityModule {
  @Binds
  @IntoMap
  @ActivityKey(YourActivity.class)
  abstract AndroidInjector.Factory<? extends Activity>
      bindYourActivityInjectorFactory(YourActivitySubcomponent.Builder builder);
}

@Component(modules = {..., YourActivityModule.class})
interface YourApplicationComponent {}

技巧说明: 如果定义的subcomponent和它的builder方法与1.2相比没有更多的方法或者继承,可以用@ContributesAndroidInjector 来自动实现1.2与1.3,实现方式: 添加抽象module,声明注解@ContributesAndroidInjector,如果subcomponent需要scope,声明scope注解

@ActivityScope
@ContributesAndroidInjector(modules = { /* modules to install into the subcomponent */ })
abstract YourActivity contributeYourActivityInjector();

1.4 当前应用的Application实现HasActivityInjector并且声明注解@Inject DispatchingAndroidInjector

public class YourApplication extends Application implements HasActivityInjector {
  @Inject DispatchingAndroidInjector<Activity> dispatchingActivityInjector;

  @Override
  public void onCreate() {
    super.onCreate();
    DaggerYourApplicationComponent.create()
        .inject(this);
  }

  @Override
  public AndroidInjector<Activity> activityInjector() {
    return dispatchingActivityInjector;
  }
}

1.5 Activity的onCreate()方法里在super.onCreate()方法之前调用 AndroidInjection.inject(this)
实现过程:
AndroidInjectrion.inject()从Application那里得到DispatchingAndoridInjectro并传递到Activity中实现inject(Activity),而DispatchingAndroidInjector需要AndroidInjector.Factory(也即YourActivitySubcomponent.Builder),YourActivitySubcomponent创建了AndroidInjector并传递到Activity中注入
2、注入Fragment对象
注入Fragment与注入Fragment雷同,同样的方式定义subcomponent,用Fragment替换Activity,替换用@Fragmentkey替换@ActivityKey,用HasFragmentInjector替换HasActivityInjector,Activity在onCretate中注入,Fragment在onAttach中注入.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值