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