Android dagger 依赖循环

Kat*_*azo 2 android dependency-injection cycle dagger

我有 2 个具有相同作用域的依赖项,它们彼此需要。

我的依赖项是具有不同方法的域服务(每种方法都有不同的业务案例)。一些业务案例可能使用来自另一个领域的方法。

为了做到这一点,我需要 domain1 可用于 domain2,反之亦然。

但是当我这样做时,我得到一个依赖循环编译错误。在谷歌搜索一段时间后,我发现为了克服这个问题,我必须使用 @Inject 注释而不是 @Module 中的构造函数参数注入依赖项之一。

当我尝试这个代码编译但匕首根本没有注入第二个依赖项。

有没有办法用 Dagger 实现我想要的?

Jef*_*ica 8

你的问题: AClass 对 BClass 有一个构造函数依赖,而 BClass 对 AClass 有一个构造函数依赖。即使没有 Dagger,这也行不通:如果它们相互依赖,你会先创建哪个?

您尝试的解决方案:如果您使用 来创建您的类(BClass)之一new,并且它不再具有带@Inject注释的构造函数,则您可以等到 AClass 被构造后填充您的 BClass 实例。但是,如果您使用 来创建对象new,则需要通过将其传递给成员注入方法或MembersInjector<BClass>对象来注入它。您还需要确保这发生在@Provides方法之外(因为@Provides调用的全部原因是您可以构造一个值以传递给 AClass 的构造函数)。这是脆弱的,相当丑陋。

我的建议:通过 Provider使用间接。有 AClass injectionProvider<BClass>或 BClass injection Provider<AClass>,或两者兼而有之。只要你不在get构造函数中调用,你就会允许 Dagger 创建 AClass 并推迟 BClass 的创建,直到你需要它。你不需要额外的配置,以注入Provider<T>Lazy<T>你在你的组件所约束的任何T类; 有关可用注射的完整列表,请参阅用户指南中的“图表中的绑定”