另一个JAR文件中的抽象模块

时间:2016-12-09 00:00:05

标签: java maven dependency-injection dagger-2

如果用匕首-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中的某些东西让整个事情发挥作用,但我无法理解。

1 个答案:

答案 0 :(得分:0)

我最终想通了。 从另一个包中的实现中看不到抽象类中的提供者。

我保护了它,之后一切都很酷。