package com.dronecontrol.intelcontrol.injection; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Singleton; import com.dronecontrol.droneapi.DroneController; import com.dronecontrol.intelcontrol.control.DroneInputController; import com.dronecontrol.intelcontrol.entry.Main; import com.dronecontrol.intelcontrol.helpers.RaceTimer; import com.dronecontrol.intelcontrol.ui.FxWindow; import com.dronecontrol.perceptual.PerceptualController; import com.dronecontrol.perceptual.helpers.CoordinateCalculator; public class Context extends AbstractModule { private static Injector injector; public static <T> T getBean(Class<T> clazz) { if (injector == null) { injector = Guice.createInjector(new Context()); } return injector.getInstance(clazz); } // Used for value builder @SuppressWarnings("UnusedDeclaration") protected Injector getInjector() { return injector; } @Override protected void configure() { bind(Main.class).in(Singleton.class); bind(DroneInputController.class).in(Singleton.class); bind(FxWindow.class).in(Singleton.class); bind(DroneController.class).toProvider(DroneControllerProvider.class); bind(PerceptualController.class).toProvider(PerceptualControllerProvider.class); bind(RaceTimer.class).in(Singleton.class); bind(CoordinateCalculator.class).in(Singleton.class); } }