设为首页 加入收藏

TOP

Dagger2 (三) 总结篇(二)
2017-10-12 17:57:42 】 浏览:9156
Tags:Dagger2 总结
er != null; initialize(builder); } public static Builder builder() { return new Builder(); } private void initialize(final Builder builder) { this.contextProvider = new Factory<Context>() { private final ApplicationComponent applicationComponent = builder.applicationComponent; @Override public Context get() { Context provided = applicationComponent.context(); if (provided == null) { throw new NullPointerException("Cannot return null from a non-@Nullable component method"); } return provided; } }; this.baseActivityMembersInjector = BaseActivity_MembersInjector.create((MembersInjector) MembersInjectors.noOp(), contextProvider); this.provideToasterProvider = ScopedProvider.create(ActivityUtilModule_ProvideToasterFactory.create(builder.activityUtilModule)); this.provideTheToasterProvider = ActivityUtilModule_ProvideTheToasterFactory.create(builder.activityUtilModule); } @Override public void inject(BaseActivity activity) { baseActivityMembersInjector.injectMembers(activity); } @Override public Toaster theToaster() { return provideToasterProvider.get(); } @Override public Toaster toaster() { return provideTheToasterProvider.get(); } public static final class Builder { private ActivityUtilModule activityUtilModule; private ApplicationComponent applicationComponent; private Builder() { } public ActivityComponent build() { if (activityUtilModule == null) { throw new IllegalStateException("activityUtilModule must be set"); } if (applicationComponent == null) { throw new IllegalStateException("applicationComponent must be set"); } return new DaggerActivityComponent(this); } public Builder activityUtilModule(ActivityUtilModule activityUtilModule) { if (activityUtilModule == null) { throw new NullPointerException("activityUtilModule"); } this.activityUtilModule = activityUtilModule; return this; } public Builder applicationComponent(ApplicationComponent applicationComponent) { if (applicationComponent == null) { throw new NullPointerException("applicationComponent"); } this.applicationComponent = applicationComponent; return this; } } }

provideToasterProvider则和其他初始化方式不同,可以看到后面ProviderToaster的工厂很普通:

@Generated("dagger.internal.codegen.ComponentProcessor")
public final class ActivityUtilModule_ProvideToasterFactory implements Factory<Toaster> {
  private final ActivityUtilModule module;

  public ActivityUtilModule_ProvideToasterFactory(ActivityUtilModule module) {  
    assert module != null;
    this.module = module;
  }

  @Override
  public Toaster get() {  
    Toaster provided = module.provideToaster();
    if (provided == null) {
      throw new NullPointerException("Cannot return null from a non-@Nullable @Provides method");
    }
    return provided;
  }

  public static Factory<Toaster> create(ActivityUtilModule module) {  
    return new ActivityUtilModule_ProvideToasterFactory(module);
  }
}

那么ScopedProvider.create包住的工厂有什么特别的呢?

public final class ScopedProvider<T> implements Provider<T> {
  private static final Object UNINITIALIZED = new Object();

  private final Factory<T> factory;
  private volatile Object instance = UNINITIALIZED;

  private ScopedProvider(Factory<T> fa
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一款面试复习应用源码 下一篇27个漂亮的移动端注册/登录界面设..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目