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 注释进行注入,但是,我只是将其作为对我想要实现的目标的参考)。
删除@Inject注释,你应该可以开始了。如@Provides 方法用户指南页面中所列:
如果该方法具有像或 这样
@Provides的绑定注释,Guice 会绑定注释的类型。依赖项可以作为参数传递给方法。注入器将在调用该方法之前执行每个这些的绑定。@PayPal@Named("Checkout")