关于Dagger 2,我有一个愚蠢的问题要问。因为我想确定。我知道在编译时,Dagger会生成代码。但是对于以下代码:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
          //build main component along with core component
         mainComponent = DaggerMainComponent
                .builder()
                .myModule(MyModule())
                .coreComponent(DaggerCoreComponent.builder().build())
                .build()
     }
}


Dagger是否会调用build()来构建组件以在编译时或运行时绘制依赖关系图?我的理解是在运行时,对吗?

如果我在上面是正确的,那么下面的代码呢?:

@Module(subcomponents = MySubComponent.class)
abstract class MyModule {
  ...
}


我的理解是,使用此Dagger可以自动检测是否请求了MySubComponent,如果没有,它不会生成MySubComponent中托管的依赖项。但是,此过程是否在运行时或编译时发生?

最佳答案

依赖关系图是在编译时通过注释处理构建的。 Dagger将根据您添加到类中的注释(例如DaggerMainComponent@Module@Component等),从示例中生成类似@Inject的类。

我建议您阅读有关注释处理的文章,例如one


  那么什么是注释处理?注释是一种标记机制,您可以在类,方法或参数上标记一些元,并且注释处理将在编译时分析那些注释并根据您的注释为您生成类。


在运行时调用build(),您可以打开DaggerMainComponent的代码并检查build方法的实现,它将创建一些依赖模块的实例,检查其他需求,最后创建一个。

关于android - 依赖关系图的构建是否在Dagger 2中的编译时或运行时进行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58549169/

10-12 03:20