DaggerPassPortComponent.builder()
.applicationComponent(getAppComponent())
.passPortModule(new PassPortModule(this))
.build()
.inject(this);
@Inject
IDCardBean mIDCard;
@Inject
FamilyRegisterBean mFamilyRegister;
// @PerActivity
// @Provides
// public IDCardBean provideIDCard() {
// return new IDCardBean(mView);
// }
@PerActivity
@Provides
public FamilyRegisterBean provideFamilyRegister() {
return new FamilyRegisterBean(mView);
}
编译成功之后就会生成一个 DaggerPassPortComponent ,那么这是个什么东西呢,我们一步一步看下他的源码,点 builder() 之后看到
public static Builder builder() {
return new Builder();
}
public static final class Builder {
private PassPortModule passPortModule;
private ApplicationComponent applicationComponent;
private Builder() {}
public PassPortComponent build() {
if (passPortModule == null) {
throw new IllegalStateException(PassPortModule.class.getCanonicalName() + " must be set");
}
if (applicationComponent == null) {
throw new IllegalStateException(
ApplicationComponent.class.getCanonicalName() + " must be set");
}
return new DaggerPassPortComponent(this);
}
public Builder passPortModule(PassPortModule passPortModule) {
this.passPortModule = Preconditions.checkNotNull(passPortModule);
return this;
}
public Builder applicationComponent(ApplicationComponent applicationComponent) {
this.applicationComponent = Preconditions.checkNotNull(applicationComponent);
return this;
}
}
private DaggerPassPortComponent(Builder builder) {
assert builder != null;
initialize(builder);
}
而 initalize(builder) 中则有以下重要的代码
this.provideIDCardProvider =
DoubleCheck.provider(PassPortModule_ProvideIDCardFactory.create(builder.passPortModule));
this.provideFamilyRegisterProvider =
DoubleCheck.provider(PassPortModule_ProvideFamilyRegisterFactory.create(builder.passPortModule));
this.passPortActivityMembersInjector =
PassPortActivity_MembersInjector.create(provideIDCardProvider, provideFamilyRegisterProvider);
public final class PassPortModule_ProvideFamilyRegisterFactory
implements Factory<FamilyRegisterBean> {
private final PassPortModule module;
public PassPortModule_ProvideFamilyRegisterFactory(PassPortModule module) {
assert module != null;
this.module = module;
}
@Override
public FamilyRegisterBean get() {
return Preconditions.checkNotNull(
module.provideFamilyRegister(), "Cannot return null from a non-@Nullable @Provides method");
}
public static Factory<FamilyRegisterBean> create(PassPortModule module) {
return new PassPortModule_ProvideFamilyRegisterFactory(module);
}
}
public final class PassPortActivity_MembersInjector implements MembersInjector<PassPortActivity> {
private final Provider<IDCardBean> mIDCardProvider;
private final Provider<FamilyRegisterBean> mFamilyRegisterProvider;
public PassPortActivity_MembersInjector(
Provider<IDCardBean> mIDCardProvider,
Provider<FamilyRegisterBean> mFamilyRegisterProvider) {
assert mIDCardProvider != null;
this.mIDCardProvider = mIDCardProvider;
assert mFamilyRegisterProvider != null;
this.mFamilyRegisterProvider = mFamilyRegisterProvider;
}
public static MembersInjector<PassPortActivity> create(Provider<IDCardBean> mIDCardProvider,
Provider<FamilyRegisterBean> mFamilyRegisterProvider) {
return new PassPortActivity_MembersInjector(mIDCardProvider, mFamilyRegisterProvider);
}
@Override
public void injectMembers(PassPortActivity instance) {
if (instance == null) {
throw new NullPointerException("Cannot inject members into a null reference");
}
instance.mIDCard = mIDCardProvider.get();
instance.mFamilyRegister = mFamilyRegisterProvider.get();
}
public static void injectMIDCard(
PassPortActivity instance, Provider<IDCardBean> mIDCardProvider) {
instance.mIDCard = mIDCardProvider.get();
}
public static void injectMFamilyRegister(
PassPortActivity instance, Provider<FamilyRegisterBean> mFamilyRegisterProvider) {
instance.mFamilyRegister = mFamilyRegisterProvider.get();
}
}
public interface Provider<T> {
/**
* Provides a fully-constructed and injected instance of {@code T}.
*
* @throws RuntimeException if the injector encounters an error while
* providing an instance. For example, if an injectable member on
* {@code T} throws an exception, the injector may wrap the exception
* and throw it to the caller of {@code get()}. Callers should not try
* to handle such exceptions as the behavior may vary across injector
* implementations and even different configurations of the same injector.
*/
T get();
}
@Override
public void injectMembers(PassPortActivity instance) {
if (instance == null) {
throw new NullPointerException("Cannot inject members into a null reference");
}
instance.mIDCard = mIDCardProvider.get();
instance.mFamilyRegister = mFamilyRegisterProvider.get();
}
@Override
public FamilyRegisterBean get() {
return Preconditions.checkNotNull(
module.provideFamilyRegister(), "Cannot return null from a non-@Nullable @Provides method");
}
2680



被折叠的 条评论
为什么被折叠?



