@Singleton
@Provides
private ProgramRunnerFactory provideProgramRunnerFactory(final Map<ProgramRunnerFactory.Type,
Provider<ProgramRunner>> providers) {
return new ProgramRunnerFactory() {
@Override
public ProgramRunner create(Type programType) {
Provider<ProgramRunner> provider = providers.get(programType);
Preconditions.checkNotNull(provider, "Unsupported program type: " + programType);
return provider.get();