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
相关产品推荐
相关产品推荐

