code: public <P extends Provider<?>> AbstractModule config(final Class<P> klass, final Configurator<P> configurator) {
          Function<P> initializer = new Function<P>() {
              @Override
              public P call(Object... args) {
                  String m = "";
                  try {
                      ProviderCreator creator = GWT.create(ProviderCreator.class);
                      P provider = creator.create(klass);
                      ProviderBinderFactory binderFactory = GWT.create(ProviderBinderFactory.class);
                      JSClosure binder = binderFactory.create(provider);
                      if (binder != null) {
                          binder.apply(args);
                      }
                      LOG.log(Level.FINEST, "configuring " + klass.getName());
                      configurator.configure(provider);
                      return provider;
                  } catch (Exception e) {
                      LOG.log(Level.WARNING, "Exception while " + m, e);
                      return null;
                  }
              }
          };
          ProviderDependencyInspector inspector = GWT.create(ProviderDependencyInspector.class);
          String[] dependencies = inspector.inspect(klass);
          ngo.config(JSArray.create(dependencies), JSFunction.create(initializer));
          return this;
      }
docs: Configures a provider prior to obtaining the factory from it.
  Use the {@link Configurator}  to configure the provider injected into
  the module.
  
  @param klass Provider type to be configured at module initialization.
  @param configuration Configures the provider.