主函数中的 Dagger 依赖注入

Dagger Dependency Injection in main function

我在 class S3FileOperationsAdapter 中从我的 kotlin 代码中的主函数调用一个函数。我在主函数文件中注入 class S3FileOperationsAdapter。所以看起来像

class Runner {
    @set:Inject
    lateinit var s3FileOperationsAdapter: S3FileOperationsAdapter

    fun main(args: Array<String>) {
       s3FileOperationsAdapter.readFunction()
    }
}

现在的问题是:

而且我们只能在kotlin的一个对象中做一个静态函数。因此,这样做后,我无法注入依赖项,因为 Dagger does not support injection into Kotlin objects。所以感觉像死锁。

我的问题是,无论如何我都想在这个文件中注入依赖项,以便我可以调用相应的函数。我从 kotlin 中的“fun main()”调用这个函数。我怎样才能做到这一点?有没有人遇到过这个问题?

为了在 Dagger 中注入任何东西,您必须首先创建一个组件实例。由于根本没有代码会在 fun main() 之前 运行,这需要在 main 本身期间(或在字段初始化程序中)完成。

创建组件的实例后,您可以直接向它请求S3FileOperationsAdapter的实例。

fun main(args: Array<String>) {
    // Create the component.
    val component = DaggerMyComponent.create()
    // or use the Component.Builder or Component.Factory you defined for MyComponent.

    // Get an object from the component.
    // This method should be defined in your component interface.
    val adapter = component.s3FileOperationsAdapter()

    // Use the object.
    adapter.readFunction()
}

如果您的实际代码更复杂,有多个注入对象和更长的 main() 函数,这可能有点笨拙。在这种情况下,您可以将当前的 main() 提取到它自己的 class 中,并让 Dagger 在 main().

中提供 class