/// <summary>
 /// Creates a <see cref="S3XmlRepository"/> with keys stored at the given bucket &amp; optional key prefix.
 /// </summary>
 /// <param name="s3Client">The S3 client.</param>
 /// <param name="config">The configuration object specifying how to write to S3.</param>
 /// <param name="logger">An optional <see cref="ILogger"/> to provide logging.</param>
 /// <param name="mockWrapper">Wrapper object to ensure unit testing is feasible.</param>
 public S3XmlRepository(IAmazonS3 s3Client, IOptions <S3XmlRepositoryConfig> config, ILogger <S3XmlRepository> logger, IMockingWrapper mockWrapper)
 {
     this.s3Client    = s3Client ?? throw new ArgumentNullException(nameof(s3Client));
     this.config      = config ?? throw new ArgumentNullException(nameof(config));
     this.logger      = logger;
     this.mockWrapper = mockWrapper;
 }
 /// <summary>
 /// Creates a <see cref="S3XmlRepository"/> with keys stored at the given bucket &amp; optional key prefix.
 /// </summary>
 /// <param name="s3Client">The S3 client.</param>
 /// <param name="config">The configuration object specifying how to write to S3.</param>
 /// <param name="services">An optional <see cref="IServiceProvider"/> to provide ancillary services.</param>
 /// <param name="mockWrapper">Wrapper object to ensure unit testing is feasible.</param>
 public S3XmlRepository(IAmazonS3 s3Client, IS3XmlRepositoryConfig config, IServiceProvider services, IMockingWrapper mockWrapper)
 {
     this.s3Client    = s3Client ?? throw new ArgumentNullException(nameof(s3Client));
     Config           = config ?? throw new ArgumentNullException(nameof(config));
     logger           = services?.GetService <ILoggerFactory>()?.CreateLogger <S3XmlRepository>();
     this.mockWrapper = mockWrapper;
 }