我有一个主要应用程序,该应用程序使用Dagger(某些早期版本)来提供依赖项。
现在,我正在编写要使用的SDK(Dagger 2.10+)。当我有一个应用程序类时,一切正常,就像应用程序具有(HasActivityInjector)一样,它负责DaggerAppComponent的初始化。
我的问题是-
任何建议都会很棒!
答案 0 :(得分:1)
我最近不得不解决同一问题:
创建可在任何受支持的Android应用中使用的SDK 。
我确实必须接受这样一个前提,即某些想要使用SDK的应用程序本身不会使用Dagger甚至依赖项注入。
正如OP指出的那样,创建使用依赖项注入的SDK的主要问题是App中的 Application 实现。
创建 HasActivityInjector,HasFragmentInjector或HasSupportFragmentInjector 的部分原因是需要遵守以下依赖项注入规则:
一个班级应该对注入方式一无所知。 Reference A
通过创建 HasXInjector 接口,Android允许将Dagger依赖关系图附加到应用程序,然后由应用程序负责将依赖关系注入到它们需要通过以下代码注入:
AndroidInjection.inject(this) // <-- 'this' being an Activity or Fragment
SDK问题
问题是SDK没有自己的Application实现。此外,SDK不能向App的Application实现添加任何内容,也不能覆盖App的Application实现。
在使用外部SDK的情况下,它甚至不知道应用程序的实现,只知道应用程序接口。
因此,即使未保证包含SDK的应用程序使用Dagger,SDK也无法将其依赖关系图添加到App的Application实现所使用的依赖关系图中,从而使所有SDK依赖关系均不可访问。 /> 如果应用程序不使用Dagger,那么首先如何注入依赖项?
我自己针对此问题的解决方案是打破上面引用的规则,而不在SDK内部使用 HasActivityInjector,HasFragmentInjector或HasSupportFragmentInjector 进行注入。