Чтобы сделать вещь, наиболее похожую на «передачу параметра поставщику», вы можете определить класс фабрики, например:
class VehicleFactory {
Vehicle build(int numWheels) {
return new Vehicle(numWheels);
}
}
, а затем внедрить эту фабрику в место, которое необходимо создать. случаи Vehicle
.
Вы можете рассмотреть возможность использования Вспомогательная инъекция для определения привязок для фабрики; вспомогательная инъекция сильно смущает меня, когда я ее использую, поэтому вы можете сначала рассмотреть более простые решения.
Если вам действительно нужно создавать только 2- или 4-колесные транспортные средства (а не какое-то другое произвольное число), Вы можете указать фабричные методы c:
class VehicleFactory {
Vehicle buildTwoWheeled() {
return new Vehicle(2);
}
Vehicle buildFourWheeled() {
return new Vehicle(4);
}
}
Или вы можете привязать отдельные экземпляры провайдера:
public class TwoWheelVehicleProvider implements Provider<Vehicle> { ... }
public class FourWheelVehicleProvider implements Provider<Vehicle> { ... }
Или определить аннотации привязки:
@Provides @TwoWheeled
Vehicle provideTwoWheeledVehicle() { return new Vehicle(2); }
@Provides @FourWheeled
Vehicle provideFourWheeledVehicle() { return new Vehicle(4); }