Die*_*rez 6 android dependency-injection kotlin dagger-2 dagger-hilt
我正在开发一个多模块应用程序 - 也有明确的关注点分离 - 使用 Kotlin,我试图在其中实现 Hilt - 也解耦 - 并且我在从模块访问应用程序类时遇到问题。
首先,我的应用程序的结构:
project
|- App
|- Common
|- Core
|- DTO
|- Repository
Run Code Online (Sandbox Code Playgroud)
模块之间的关系(模块可见性):
Project
|
|- App
| |- Common
| |- DTO
| |- Core
|
|- Common
| |- DTO
|
|- Core
| |- Common
|
|- DTO
|
|- Repository
| |- Common
| |- DTO
Run Code Online (Sandbox Code Playgroud)
好吧,所有模块在其相应的 build.gradle 中都有所需的 Hilt 依赖项和插件。
我有一个 AppSettings 类,其中包含表示所有应用程序配置(如颜色)的常量,以及一个上下文和一个单例 SQLite 数据库实例。
到目前为止,我以静态方式访问所有常量和上下文,一切都工作正常,并且我使用 WeakReference 作为上下文以避免内存泄漏,但有人建议使用这种方式的上下文不利于测试,解耦并使用 DI,这就是我开始使用 Hilt 的原因。
我不知道我的实现是否正确,因为我是 Hilt 的新手,这让我很头疼,但让我们开始吧:
我认为我的 AppSettings 可能是 Hilt 所需的应用程序类,并且由于它随处可用,因此也可以完美地为需要的上下文提供服务。
应用程序设置:
@HiltAndroidApp
class AppSettings : MultiDexApplication() {
val actionBarTitleColor = "#0D0D0D"
...
}
Run Code Online (Sandbox Code Playgroud)
我还不确定是否应该将此应用程序类放在应用程序模块中,或者是否应该将其放在“通用”模块中,该模块可以从所有其他模块访问......
出现这种混乱的原因是,如果我将它放在“Common”中,它将在任何地方都可用,但如果它位于应用程序中,则 Common 无权访问应用程序,而 Common 需要访问配置常量。
另一方面,我也不确定我的 AppSettings 是否应该是 Application 类,或者它只是一个 Hilt 模块会更好......
不管怎样,我正在尝试以多种方式提供配置全局变量,但它们实际上都没有使我的应用程序能够构建。
我的尝试之一是在 Common 中创建一个 Hilt 模块来为 AppSettings 提供服务,如下所示:
@Module
@InstallIn(SingletonComponent::class)
object Dependencies {
@Provides
@Singleton
fun bindsAppSettings(): AppSettings {
return AppSettings()
}
}
Run Code Online (Sandbox Code Playgroud)
然后在任何辅助类中我可以这样做:
class TestClass @Inject constructor() {
@Inject
lateinit var appSettings: AppSettings // = Dependencies.bindsAppSettings()
fun whatever() {
val color = appSettings.actionBarEndColor
}
}
Run Code Online (Sandbox Code Playgroud)
但不确定如何初始化 appSettings,注释的代码是否正常(尽管它确实适用于注释的代码)
如果不是创建一个模块来服务 AppSettings,我可以直接将其注入到任何地方,但是如何注入。
最后,我需要的是我的配置类在我的多模块应用程序中的任何位置都可用,但这也适用于我需要注入的任何其他类。
有关如何处理所有模块中可用的应用程序类(或模块中的 AppSettings)的任何帮助。
| 归档时间: |
|
| 查看次数: |
1456 次 |
| 最近记录: |