我有两个具有相同范围的依赖项,彼此需要。
我的依赖项是具有不同方法的域服务(每种方法都有不同的业务案例)。某些业务案例可能会使用另一个领域的方法。
为此,我需要域 1 可用于域 2,反之亦然。
但是当我这样做时,我收到依赖循环编译错误。经过谷歌搜索一段时间后,我发现为了解决这个问题,我必须使用 @Inject 注释注入依赖项之一,而不是 @Module 中的构造函数参数。
当我尝试这样做时,代码会编译,但 dagger 根本没有注入第二个依赖项。
有没有办法用 Dagger 实现我想要的目标?
你的问题:类对类有构造函数依赖,类对 AClass 也有构造函数依赖。即使没有 Dagger,这也行不通:如果它们相互依赖,你会先创建哪个?
您尝试的解决方案:如果您使用以下命令创建您的类之一 (BClass)new
,并且它不再有@Inject
-带注释的构造函数,您可以等到构造一个类之后才填充您的类实例。但是,如果您使用创建对象new
,您需要通过将其传递到成员注入方法中来注入它,或者MembersInjector<BClass>
目的。您还需要确保这发生在外部@Provides
方法(因为整个原因@Provides
被调用是为了你可以构造一个值传递给 A 类的构造函数)。这是脆弱且相当丑陋的。
我的建议: Use 通过 Provider 间接 https://github.com/google/dagger/issues/200。让 AClass 注入Provider<BClass>
,或BClass注入Provider<AClass>
, 或两者。只要你不打电话get
在构造函数中,您将允许 Dagger 创建一个类并推迟类的创建直到您需要它为止。您不需要额外的配置来注入Provider<T>
or Lazy<T>
对于您在组件中绑定的任何类 T;看用户指南中的“图表中的绑定” https://google.github.io/dagger/users-guide#bindings-in-the-graph获取可用注射的完整列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)