- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最近我开始将我们的应用程序分成更小的 Android 模块,但我很难让 Dagger 以我想要的方式工作。
我目前的 Dagger 设置包括:
- ApplicationComponent
标记为@Singleton
。此组件在应用启动时创建。
- UserSubComponent
标有@UserScope
。该子组件在用户登录时创建。
这两个组件与负责创建这两个组件的 App
类一起放置在我的 app
模块中。
在我的 login
模块中(它是我的应用程序模块的父级,因此它无法访问应用程序模块中的任何内容)我有我的 AuthenticationManager
。当用户登录时,我使用 RxJava 从我的 AuthenticationManager
向 App
发出信号,因此可以创建 UserSubComponent
。
我的问题是我需要从我的 UserSubComponent
访问一些依赖项,在它创建之后,在我的 AuthenticationManager
中,这样我就可以在继续之前预加载用户的数据.
模块结构:
app (AppComponent & UserSubComponent)
^
|
login (AuthenticationManager) - feature 2 - feature 3
我的应用类:
class App : DaggerApplication() {
@Inject
lateinit var authenticationManager: AuthenticationManager
override fun onCreate() {
super.onCreate()
authenticationManager
.authenticationStateStream
.subscribe { state ->
if (state == AuthenticationState.AUTHENTICATED) {
AppInjector.userComponent.inject(this)
}
}
}
身份验证管理器:
class AuthenticationManager @Inject constructor(loginApi: LoginApi) {
@Inject
lateinit var preLoader : PreLoader // This won't work because of different scope
val authenticationStateStream = Observable<AuthenticationState>()
fun login() {
if (success) {
authenticationStateStream.emit(AuthenticationState.AUTHENTICATED)
// UserSubComponent is now created
preLoader.preload()
}
}
}
应用组件
@Singleton
@Component(modules = [AppModule::class, AndroidSupportInjectionModule::class])
interface AppComponent : AndroidInjector<App> {
fun userComponentBuilder(): UserComponent.Builder
}
应用模块
@Module
class AppModule {
@Provides
@Singleton
fun provideLoginApi() = LoginApi()
}
用户子组件
@UserScope
@Subcomponent(modules = [UserModule::class, AndroidSupportInjectionModule::class])
interface UserComponent : AndroidInjector<App> {
@Subcomponent.Builder
interface Builder {
fun build(): UserComponent
}
}
用户模块
@Module
class UserModule {
@Provides
@UserScope
fun providesPreLoader() = PreLoader()
}
我能否以某种方式让这个结构发挥作用?或者,当涉及到模块 + Dagger 时,我有哪些选择?
最佳答案
经过多次尝试,我终于设法解决了我的问题。
我发现的是:
我发现这篇文章非常有用: https://proandroiddev.com/using-dagger-in-a-multi-module-project-1e6af8f06ffc
关于android - 从父 android 模块访问 Dagger 子组件依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53653653/
我有一个层次结构中的项目列表,我正在尝试将此列表解析为实际的对象层次结构。我正在使用modified pre-order tree traversal存储/迭代此列表,所以我拥有的是树的子集,包括所有
给定这个类: public class Parent { public Child[] Children {get;set;} } 还有这个数组: Parent[] parents; 如何使用 L
我面临着一些难以完成这个看似简单的任务。 我在一个嵌套块 (Suggest.phtml) 中,我想从父块 (result.phtml) 获取一个值(搜索结果的数量,以及集合计数) 我错了还是这里没有简
我在访问子模型重复器字段以在没有用户操作的情况下加载时遇到问题,我在父模型 Controller 中使用 RelationController这就是我在父 Controller 中所做的 class
我有一个 datetime 指令,其范围内包含两个属性:date 和 time。如何从父 Controller 访问这些属性?我尝试这样做 Start: End: You
我的父类是: public Class Parent { protected void foo() { bar(); } protected void
所以我知道如何中断列表的继承 (SPList.BreakRoleInheritance(true)),但是如何以编程方式从其父级重新继承? 谢谢 最佳答案 MSDN link . SPList.Res
最近我们将maven版本更改为3.5.4根据https://issues.apache.org/jira/browse/MNG-5940 Maven Super POM 中的 maven-source
我需要在单击页面背景(#page)时触发一个事件(例如隐藏 float 购物车),但在单击内部内容时不会发生此事件。所以我需要这个事件发生在空间:页面减去内容。我该如何实现它?谢谢 如果我有这个结构:
我在另一个 ajax 函数中有一个 ajax 函数 $.ajax({ url: '../...', type: 'POST',
我创建了两个类 - Building 和 Warehouse。 Warehouse 扩展 Building。我创建了 Building map (building_map),其中放置了 Buildin
我有一个获取和处理数据的 Activity ,我想启动一个新 Activity ,该 Activity 能够从父 Activity 访问一些变量(复杂数据结构)。 我不能在这里使用序列化,有没有一种简
在 HTML 中,我有两个函数,一个是仅带有警报的 abc,另一个是使用 window.open() 创建一个新窗口,并填充预定义的 HTML 字符串。我想从父 HTML 调用该函数。我尝试过调用pa
我一直在研究这个脚本并且一切正常,除了 $(this).parents(".clonedInput").clone()。按钮克隆引用放置在 .clonedInput div 中。 如果能帮助我从 cl
我有以下代码: 主要 HTML 文档 $(function(){ $("#i").load(function(){ var $iframeConten
html 的一部分结构如下。我想从中获得工作“标题”和“时间”。我可以单独获取它们,例如: from bs4 import BeautifulSoup pages = ' \
我正在尝试从父 div 中删除底部边框。我已经编写了以下 HTML 代码,但我认为我的方法不正确。看到这张图片 这是我的 HTML 代码 j
通常,我可以从 Activity 调用扩展 DialogFragment 并实现 DialogInterface.OnClickListener() 的对象。 然后,如果我想从那个 Dialog 调用
我花了好几个小时搜索如何从嵌套 Controller 更新服务值。 我的子 Controller 需要更新服务中的值。该值需要显示在父 Controller 中。 我做了一个jsfiddle,让它更清
我有一个包含一些数据的表格,表格中的每个元素都是一个 React 类组件。它看起来像这样: 我想要的只是有一个用于“选中所有”功能的复选框(左上角的复选框)。问题是我不知道如何解决这个问题,因为 pr
我是一名优秀的程序员,十分优秀!