首页 > 解决方案 > 如何在 SDK 中使用 Dagger 2?

问题描述

我有一个主应用程序,它使用 Dagger(一些以前的版本)来提供依赖项。

现在,我正在编写一个我正在使用的 SDK(Dagger 2.10+)。当我有一个应用程序类时,一切都很好,因为应用程序有(HasActivityInjector),它负责 DaggerAppComponent 的初始化。

我的问题是-

任何建议都会很棒!

标签: androidsdkdagger-2

解决方案


我最近不得不解决同样的问题:
创建一个可以在任何受支持的 Android App 中使用的 SDK

我确实不得不接受这样一个前提,即一些想要使用 SDK 的应用程序本身不会使用 Dagger 甚至依赖注入。

正如 OP 所指出的,创建使用依赖注入的 SDK 的主要问题是应用程序中的应用程序实现。

创建HasActivityInjector、HasFragmentInjector 或 HasSupportFragmentInjector的部分原因是需要遵守以下依赖注入规则:

一个类不应该知道它是如何注入的。参考 A


随着HasXInjector接口的创建,Android 允许将 Dagger Dependency Graph 附加到 Application,然后通过以下代码由 Application 负责注入需要注入的依赖项:

AndroidInjection.inject(this) // <-- 'this' being an Activity or Fragment


SDK ISSUE
问题是 SDK 没有自己的应用程序实现。此外,SDK 不能向 App 的 Application 实现添加任何内容,也不能覆盖 App 的 Application 实现。在外部 SDK 的情况下,它甚至不知道应用程序的实现,只知道应用程序接口。

所以即使已经包含了SDK的Application使用了Dagger,这是无法保证的,SDK也无法将自己的Dependency Graph添加到App的Application实现所使用的Dependency Graph中,使得所有的SDK依赖都无法访问。
如果应用程序不使用 Dagger,首先如何注入依赖项?

我自己对此问题的解决方案是打破上面引用的规则,并且不在 SDK 内部使用HasActivityInjector、HasFragmentInjector 或 HasSupportFragmentInjector进行注入。


推荐阅读