code: @Override
    protected void configure() {
  
      // Bind and expose LogWriter (a bit hacky, but needed by MapReduce for now)
      bind(LogWriter.class).to(LocalLogWriter.class);
      expose(LogWriter.class);
  
      // Bind ServiceAnnouncer for procedure.
      bind(ServiceAnnouncer.class).to(DiscoveryServiceAnnouncer.class);
  
      // For Binding queue stuff
      bind(QueueReaderFactory.class).in(Scopes.SINGLETON);
  
      // Bind ProgramRunner
      MapBinder<ProgramRunnerFactory.Type, ProgramRunner> runnerFactoryBinder =
        MapBinder.newMapBinder(binder(), ProgramRunnerFactory.Type.class, ProgramRunner.class);
      runnerFactoryBinder.addBinding(ProgramRunnerFactory.Type.FLOW).to(FlowProgramRunner.class);
      runnerFactoryBinder.addBinding(ProgramRunnerFactory.Type.FLOWLET).to(FlowletProgramRunner.class);
  
      bind(ProgramRunnerFactory.class).to(InMemoryFlowProgramRunnerFactory.class).in(Scopes.SINGLETON);
      // Note: Expose for test cases. Need to refactor test cases.
      expose(ProgramRunnerFactory.class);
  
      // For binding DataSet transaction stuff
      install(new DataFabricFacadeModule());
    }
docs: Configures a {@link com.google.inject.Binder} via the exposed methods.