public <T extends AmazonWebServiceClient> Aws doWith(
      final BiFunction<T, Config, Object> callback) {
    requireNonNull(callback, "Callback is required.");
    after.add(callback);
    return this;
  }
public <T extends AmazonWebServiceClient> Aws doWith(
      final BiFunction<T, Config, Object> callback) {
    requireNonNull(callback, "Callback is required.");
    after.add(callback);
    return this;
  }
public < T extends AmazonWebServiceClient > Aws doWith ( final BiFunction < T , Config , Object > callback ) { requireNonNull ( callback , "Callback is required." ) ; after . add ( callback ) ; return this ; }
Like {@link #with(BiFunction)} but it depends on a previously created service.

<pre>
{
use(new Aws()
.with(creds {@literal ->} new AmazonS3Client(creds))
.with(creds {@literal ->} new AmazonSQSClient(creds))
.doWith((AmazonS3Client s3) {@literal ->} new TransferManager(s3))
);
</pre>

It will bind a <code>TransferManager</code> as a Guice service.

@param callback A creation callback.
@param <T> Aws service type.
@return This module.
Like { @link #with ( BiFunction ) } but it depends on a previously created service .