我想在构建它的时候为我的子组件生成器设置一个值。如果是简单的匕首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,子组件及其相关构建器由@ContributesAndroidInjector处理。Dagger Auto生成子组件及其构建器,甚至在当前上下文中实现它。
我想在构建我的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();但没有成功。请让我知道
发布于 2018-07-26 20:14:03
dagger.android通过在onCreate中自动创建组件来工作,并且需要以这种方式工作,因为Android允许自己创建活动。预先创建您的AndroidInjector将无法工作;这就是您以前的方法的错误所在。
正如我试图通过重复的问题投票来指出的那样,在@BindsInstance中设置模块实例或dagger.android值的唯一方法是AndroidInjector.Builder,它也充当您的@Subcomponent.Builder。这将允许您从活动实例中提取值,并在活动图中设置它们。
尽管您可以始终将数据存储在@Singleton (ApplicationComponent-作用域)对象或VM全局变量中,但是您正在尝试通过在不设置全局状态的情况下小心地将数据从一个活动传递到另一个活动来做正确的事情。我认为这是正确的方法,但您的解决方案可能不需要显式地构建AndroidInjector。相反,pass your data through the extras bundle是一种将参数和其他数据传输到活动中的惯用方法;然后,您可以将该数据从seedInstance中的活动实例的getIntent().getExtras()中提取出来,从而将数据插入到图形中,因为 runs。
https://stackoverflow.com/questions/51539720
复制相似问题