I'm trying to use Guice to bind various processor classes where each processor takes a config object ( country specific ) and can operator on that county.
interface Config
{
String getName();
}
interface Processor
{
String getName();
}
class Process
{
private final Map<String, Processor> processorMap;
@Inject
public Process(final Map<String, Processor> processorMap)
{
this.processorMap = processorMap;
}
String process(final String country)
{
return processorMap.get(country).getName();
}
}
class ProcessorA implements Processor
{
public ProcessorA(final SomeADeps deps, final Config config) {}
}
class ProcessorB implements Processor
{
public ProcessorB(final Config config, final SomeBDeps deps) {}
}
class Process
{
private final Map<String, Processor> processorMap;
@Inject
public Process(final Map<String, Processor> processorMap)
{
this.processorMap = processorMap;
}
String process(final String country)
{
return processorMap.get(country).getName();
}
}
In the binding section
public class TestModule extends AbstractModule {
protected void configure()
{
//All the config object are created by loading from various property files
Map<String, Config> countryToConfigMap; // This map is populated
//I also have a property file, that says
// country US > use ProcessorA ( with ConfigA instance 1 )
// country UK > use ProcessorA ( with ConfigA instance 2 )
// country DE > use ProcessorB ( with ConfigB instance 1 )
//etc
//TODO: How to bind Process class ?
}
}
In the main class, I'm trying to do something like this:
Injector injector = Guice.createInjector(new TestModule());
Process process = injector.getInstance(Process.class);
System.out.println("Name:" + process.process("US"));
Could someone help me understand and figure out on how to go about solving the above design using guice ?
Thanks!