Guice 私有父模块公开绑定到子模块

Guice private parent Module expose binding to child modules

我有以下 Guice 私有模块依赖树:

public class FooModule extends PrivateModule {
    @Override
    protected void configure() {
      install(new BarModule());
      bind(Person.class);
      expose(Person.class);
    }
}

public class BarModule extends PrivateModule {
    @Override
    protected void configure() {
      install(new LifeImplModule());
      bind(Animal.class);
      expose(Animal.class);
    }
}

public class LifeImplModule extends PrivateModule {
    @Override
    protected void configure() {
      bind(Life.class).toInstance(new LifeImpl());
      expose(Life.class);
    }
}

public class Animal {
    @Inject
    public Animal(Life life) {
      //
    }
}

public class Person {
    @Inject
    public Person(Life life) {
       //
    }
}

现在,当我执行 Guice.createInjector(new FooModule()).getInstance(Person.class) 时 - 它失败了,因为它无法识别 Life.class 的绑定,而 Guice.createInjector(new FooModule()).getInstance(Animal.class) 有效,因为它通过 [= 绑定了 Life 15=].

我该如何解决这个问题?我试着移动
install(new LifeImplModule());FooModule()Animal.class 不起作用,而 Person.class 起作用。

谁能解释一下 Guice 私有模块在继承绑定方面是如何工作的? FooModule 中的 install(LifeImplModule())Person.class 和子模块 BarModule() 都不起作用吗?

由于BarModule是一个私有模块,安装在里面的任何模块都不能对外使用。
这就是为什么

install(new LifeImplModule());

不授予对 FooModuleLife 绑定的访问权限。 您可以通过从 BarModule

显式公开 Life 来解决它
install(new LifeImplModule());
expose(Life.class);