【发布时间】:2018-07-26 13:12:40
【问题描述】:
我想在构建子组件构建器时为其设置一个值。如果是简单的 Dagger 2,我们可以实现如下:
@UserScope
@Subcomponent(modules = {UserModule.class, ActivityBuilder.class, NewEditQuotationModule.class})
public interface UserComponent {
NewEditQuotationComponent.Builder getNewEditQuotationComponent();
void inject(UserManager userManager);
@Subcomponent.Builder
interface Builder {
@BindsInstance
Builder user(User user);
UserComponent build();
}}
但是在 Dagger Android 的情况下,子组件及其关联的构建器由 @ContributesAndroidInjector 处理。 Dagger 自动生成子组件及其构建器,甚至它在当前上下文中的实现。
我想在构建 My Dagger Android 子组件时设置一些值。我尝试了以下方法:
@Subcomponent(modules = NewEditQuotationModule.class)
public interface NewEditQuotationComponent extends AndroidInjector<InquiriesEditNewMainActivity> {
@Subcomponent.Builder
abstract class Builder extends AndroidInjector.Builder<InquiriesEditNewMainActivity> {
@BindsInstance
public abstract Builder setName(@Named("My_Name") String name);
}}
@Module
public abstract class NewEditQuotationModule {
@Binds
@IntoMap
@ActivityKey(InquiriesEditNewMainActivity.class)
abstract AndroidInjector.Factory<? extends Activity>
bindInquiriesEditNewMainActivityInjectorFactory(NewEditQuotationComponent.Builder builder);
}
我厌倦了通过以下方式构建它:
AndroidInjector.Builder androidInjector = MyApplication
.getApplication()
.getAppComponent()
.getApiEndPoint()
.getApiEndPointComponent()
.getUserManager()
.getUserComponent()
.getNewEditQuotationComponent().setName("My Name");
androidInjector.seedInstance(this);
androidInjector.build();
但没有成功。 请告诉我
- 如何在构建组件时设置一些值?
- 我在以前的方法中哪里错了?
【问题讨论】:
-
@JeffBowman :我的情况是,某个日期来自以前的活动,当前活动有 5 个片段,它们都需要这些数据。所以我想通过在构建它时将其设置在活动组件中来提供该数据。您建议的方法,我认为行不通。你能帮我解决这个问题吗?
标签: android dependency-injection dagger-2 dagger