我不太清楚如何用匕首2解决这个问题。假设我们有ApplicationModule
为我们提供ApplicationContext
,那么我们有ApplicationComponent
只使用这一个模块。在此基础上,我们有ActivityModule
和ActivityComponent
,它们依赖于ApplicationComponent
<代码>活动组件的构建与
ApplicationComponent component = ((MyApplication) getApplication()).getComponent();
mComponent = Dagger_ActivityComponent.builder()
.applicationComponent(component)
.activityModule(new ActivityModule(this))
.build();
然后我注入我的活动:
mComponent.inject(this);
现在我可以使用ActivityModule
中声明的所有内容,但是我无法访问ApplicationModule
。
所以问题是如何实现这一目标?所以,当我构建依赖于另一个组件的组件时,我仍然可以从第一个组件访问模块?
我想我已经找到了解决方案,在重新观看了Jake的Devxx演讲之后,我不得不错过了这一点,无论我想从另一个组件模块中使用什么,我都必须在该组件中提供,例如,我想使用ApplicationModule
中的上下文,然后在ApplicationComponent
中,我必须声明Context provideContext()
并且它将可用。很酷:)
您已经回答了问题,但答案是在“超级作用域”组件(ApplicationComponent)中指定提供方法。
例如,
@Module
public class ApplicationModule {
@Provides
@Singleton
public Something something() {
return new Something.Builder().configure().build();
// if Something can be made with constructor,
// use @Singleton on the class and @Inject on the constructor
// and then the module is not needed
}
}
@Singleton
@Component(modules={ApplicationModule.class})
public interface ApplicationComponent {
Something something(); //PROVISION METHOD. YOU NEED THIS.
}
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
@ActivityScope
public class OtherThing {
private final Something something;
@Inject
public OtherThing(Something something) {
this.something = something;
}
}
@Component(dependencies = {ApplicationComponent.class})
@ActivityScope
public interface ActivityComponent extends ApplicationComponent { //inherit provision methods
OtherThing otherThing();
}
我在应用程序中有多个匕首瞄准镜 UserScope-范围表示用户会话 ActivityScope-每个活动的范围 UserComponent-CoreComponent的子组件 UserManager-创建UserComponent的单例程序 HomeComponent-依赖于UserComponent的组件 我试图在下更新用户对象,但不知何故,对象更新没有反映在它的依赖组件上。因此,一旦更新屏幕
问题内容: 我正在配置新的Dagger Android模块,但出现此错误,这是我的组件: 我在应用程序中这样构建的 但是我仍然收到错误 错误:(20,3)错误:@ Component.Builder缺少所需模块或组件的设置器:[app.example.com.dagger.AppModule] 根据应该正确的文档,我缺少什么? 例如,这可能是带有构建器的有效组件: 问题答案: 从AppModule
问题内容: 我可能错过了一些东西,但我认为像@Singleton这样的作用域用于定义“作用域生命周期”。 我在Android应用程序中使用了Dagger 2(但我认为问题根本与android相关)。 我有1个模块: 我有两个与范围不同的组件: 两者,并且,有一个构造函数。虽然MenuPresenter期望将其作为参数,但LoginPresenter却采用了: 但是每次我使用这些组件创建一个或时,都
我对匕首2还不太熟悉。我正试图在我的Android项目中实现它。我有一个需要。我用匕首把它注射到这个服务中。 、和具有标记为的方法当我构建项目时,我收到以下错误: locationServiceComponent依赖于多个作用域组件:@Singleton NetComponent@Singleton RepositoryComponent 我知道我的不能依赖于两个作用域组件,但我的服务中需要这两个
Dagger 2即将面世,但可用的示例甚至无法立即编译,文档是Dagger 1的复制粘贴替换。 有没有人有一个在谷歌的Dagger 2上运行的正确应用程序的例子?
问题内容: 我有一个Core Android Library,我在其中使用@Singleton范围定义一个CoreComponent广告,以注入CoreModule提供的类的实例。 我想从另一个依赖于核心库并且正在使用另一个组件的Android库中访问相同的@Singleton实例。 上面的代码已构建,但是@Singleton范围对于组件是“本地的”。换句话说,有两个单例实例,一个用于CoreCo