package com.dronecontrol.droneapi.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.CommandSender;
import com.dronecontrol.droneapi.CommandSenderCoordinator;
import com.dronecontrol.droneapi.ConfigurationDataRetriever;
import com.dronecontrol.droneapi.DroneController;
import com.dronecontrol.droneapi.DroneStartupCoordinator;
import com.dronecontrol.droneapi.InternalStateWatcher;
import com.dronecontrol.droneapi.NavigationDataRetriever;
import com.dronecontrol.droneapi.VideoRetrieverH264;
import com.dronecontrol.droneapi.VideoRetrieverP264;
import com.dronecontrol.droneapi.components.ErrorListenerComponent;
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(DroneController.class).in(Singleton.class);
bind(DroneStartupCoordinator.class).in(Singleton.class);
bind(CommandSender.class).in(Singleton.class);
bind(CommandSenderCoordinator.class).in(Singleton.class);
bind(InternalStateWatcher.class).in(Singleton.class);
bind(NavigationDataRetriever.class).in(Singleton.class);
bind(VideoRetrieverH264.class).in(Singleton.class);
bind(VideoRetrieverP264.class).in(Singleton.class);
bind(ConfigurationDataRetriever.class).in(Singleton.class);
bind(ErrorListenerComponent.class).in(Singleton.class);
}
}