You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dagger 2中“组件内仅需声明一次模块”是什么意思?

Dagger 2中“每个组件仅声明一次模块”的禁止操作说明

原句翻译:你应该仅在一个组件中声明一次模块

这句话主要禁止以下三类操作:

  • 禁止在同一个组件的注解中重复声明同一个模块

    // 错误示例:AppComponent重复声明NetworkModule
    @Component(modules = {NetworkModule.class, NetworkModule.class})
    public interface AppComponent {}
    
  • 禁止在存在继承/嵌套关系的组件(如父组件与子组件)中重复声明同一个模块

    // 父组件已声明NetworkModule
    @Component(modules = {NetworkModule.class})
    public interface AppComponent {
        SubComponent.Builder subComponentBuilder();
    }
    
    // 错误示例:子组件再次声明NetworkModule
    @Subcomponent(modules = {NetworkModule.class})
    public interface SubComponent {}
    
  • 禁止在通过dependencies属性建立依赖关系的多个组件中,重复声明同一个模块

    // ComponentA已声明StorageModule
    @Component(modules = {StorageModule.class})
    public interface ComponentA {
        StorageModule.Storage getStorage();
    }
    
    // 错误示例:ComponentB依赖ComponentA的同时,重复声明StorageModule
    @Component(dependencies = {ComponentA.class}, modules = {StorageModule.class})
    public interface ComponentB {}
    

重复声明模块会触发Dagger生成冗余的依赖提供逻辑,轻则导致编译报错,重则引发依赖实例重复创建、注入逻辑冲突等运行时问题,破坏依赖注入的复用性与一致性。

内容的提问来源于stack exchange,提问作者fraterboots

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:57:06