如果用匕首-2做到这一点,我一直在试图弄明白。
假设您有一个抽象模块(因为它使用泛型)
@Module
public abstract class BaseModule<A> {
[...]
@Provides
@Singleton
A provideA() {
return [...]
}
}
此模块分布在自己的maven工件(这是一个公共库)
现在,使用该库的主程序实现了类似的操作:
class ImplModule extends BaseModule<Foo> {
[...]
}
和
public class Main() {
@Component(modules = ImplModule.class)
interface AwesomeComponent {
@Singleton Foo foo();
}
[...]
AwesomeComponent component = DaggerAwesomeComponent.builder().build();
// do something with component.foo()
}
如果我将ImplModule移动到与BaseModule相同的maven工件中,那么一切都像魅力一样。
如果ImplModule在主应用程序maven工件中,我从dagger2得到编译错误,如: “如果没有@ Provide-annotated方法,就无法提供Foo。”
感觉就像我忘记Maven中的某些东西让整个事情发挥作用,但我无法理解。
答案 0 :(得分:0)
我最终想通了。 从另一个包中的实现中看不到抽象类中的提供者。
我保护了它,之后一切都很酷。