当前位置: 首页 > 知识库问答 >
问题:

如何防止Hilt从库中选取依赖项?

慕乐语
2023-03-14

我创建了一个名为my-network-library的简单库,其中有两个类。第一个是称为BaseNetworkModule的Hilt模块

kotlin prettyprint-override">@Module
@InstallIn(ApplicationComponent::class)
object BaseNetworkModule {

    // Client
    @Singleton
    @Provides
    fun provideOkHttpClient(): OkHttpClient {
        return OkHttpClient.Builder()
            // my default okhttp setup goes here 
            .build()
    }
}

第二个是一个简单的类。

class MyAwesomeClass {
    fun doMagic() {
        // magic code goes here
    }
}

现在我想在我的一个应用程序中使用myaweSomeClass。所以我在应用程序中添加了依赖项。

implementation "com.theapache64:my-awesome-library-1.0.0"
@Module
@InstallIn(ApplicationComponent::class)
object NetworkModule {

    @Singleton
    @Provides
    fun provideOkHttpClient(): OkHttpClient {
        return OkHttpClient.Builder()
            // CUSTOM CONFIG GOES HERE 
            .build()
    }
}

所以我的问题是

  • 为什么库模块的依赖项进入应用程序模块,而不使用@moduleinclude
  • 如何告诉Hilt“不要在外部库(gradle依赖项)中查找@provides?”除非我用@module(includes=XXXModule)
  • 标记模块

共有1个答案

车胤运
2023-03-14

为什么库模块的依赖项进入应用程序模块而不使用@module的include?

因为Hilt的设计对于一个普通的android开发人员来说是尽可能简单的。

Hilt是一个简单的家伙:他在编译后的代码中看到@module@installin并使用它。将@installin视为常规Dagger2中的include。只是放在另一个地方。

 类似资料:
  • 我在本地发布了一个依赖项。依赖项位于路径上 我认为这是Windows上的默认路径。 现在,在另一个项目中,我尝试使用这个库。我的<code>构建。gradle如下所示(以及其他依赖项) 我收到构建错误,某些类不存在等... 这不足以从本地存储库中识别依赖项吗? 我也为其他依赖项使用远程存储库,但工件名称版本是唯一的(com.mycompany:mylibrary:1.0)。我希望从本地存储库中找到

  • 我有这样配置的父pom: 我的孩子波姆: 我想在我的类路径中使用4.3.5版本,因为目前我收到错误消息,不应修改父版本: 任何想法如何防止覆盖4.2.9版本?

  • 我正在使用()。有一些树节点,必须禁用这些节点才能进行选择。我试过选择活动,但它不起作用。更多信息请找到下面的代码。 如何阻止某些进行任何鼠标和键盘选择?

  • 我有一个具有2级层次结构的TreeView控件。如果选择了第二级的项目,并且用户单击了另一个项目,我需要询问他是否确定要移动到另一个项目。如果他的答案是“否”,我需要阻止选择另一个TreeViewItem。 我试着这样做: 以一种有效的方式。但是,问题是我得到了两次OnMouseDown事件:第一级项目和第二级项目。例如,对于这棵树:俄罗斯-莫斯科-皮特美国-纽约-波士顿如果我单击波士顿,我将获得

  • 我正在从事一个Spring项目,其中单元测试有自己的配置,称为UnitTestConfig,它有几个定义类似于主应用程序文件的bean(几乎是一个副本)。保持结构不变,我正在对主应用程序服务器代码进行一些更改,但是这会在UnitTestConfig中引发错误,因为它没有注入所需的bean。这些bean没有在单元测试中使用,有没有办法阻止UnitTestConfig尝试注入这些bean?这是一个巨大

  • 我在父母pom中有一个依赖管理部分,比如 还有一个孩子pom 我试图使用强制执行器插件防止这种在子pom中重写,只允许在父级中设置这些,但一直无法。我希望这会使构建失败。有可能吗,使用那个插件或其他方式? 还有DependencyConvergence,它强制所有版本都是相同的,但这太严格了,因为我不想控制所有可传递的依赖项,只想控制显式定义的依赖项。 如果我能阻止在子pom中引入任何新的依赖项,