Guice:将依赖注入@provides 提供者

aDi*_*DiT 5 java dependency-injection guice

我有一个模块,我在其中创建了一个提供程序,并且需要该提供程序作为同一模块中另一个提供程序的依赖项。但是,我的设置目前无法做到这一点。我该如何解决这个问题?还应该注意的是,所有依赖项都是第三方库,所以我认为我不应该在我的模块中绑定它(根据我读过的内容)。

不幸的是,由于保密协议,我无法提供实际代码,但可以在下面看到依赖层次结构的示例:

public MyModule extends AbstractModule {
    @Override
    protected void configure() {}

    @Singleton
    @Provides
    public Engine provideEngine(){
        Map<String, String> engineProperties = new HashMap<>();
        engineProperties.put("brand", "some brand");
        engineProperties.put("capacity", "2.6 litres");
        return new Engine(engineProperties);
    }

    @Inject
    @Provides
    public Car provideCar(Engine engine){
        Car car = new Car(engine);
        return car;
    }
}
Run Code Online (Sandbox Code Playgroud)

简而言之,我需要创建一个自定义引擎,事先设置一些属性,然后将该引擎用作 Car 创建的依赖项(请注意,我完全知道我无法在模块中使用 @Inject 注释进行注入,但是,我只是将其作为对我想要实现的目标的参考)。

Jef*_*ica 1

删除@Inject注释,你应该可以开始了。如@Provides 方法用户指南页面中所列:

如果该方法具有像或 这样@Provides的绑定注释,Guice 会绑定注释的类型。依赖项可以作为参数传递给方法。注入器将在调用该方法之前执行每个这些的绑定。@PayPal@Named("Checkout")