private async Task UploadAsync(string name, AuditEvent auditEvent)
        {
            var container = await EnsureContainerAsync(auditEvent);

            var blob = container.GetBlockBlobReference(name);
            var json = Configuration.JsonAdapter.Serialize(auditEvent);

            if (MetadataBuilder != null)
            {
                var metadata = MetadataBuilder.Invoke(auditEvent);
                if (metadata != null)
                {
                    foreach (var md in metadata)
                    {
                        blob.Metadata[md.Key] = md.Value;
                    }
                }
            }
            await blob.UploadTextAsync(json);

            if (AccessTierBuilder != null)
            {
                var accessTier = AccessTierBuilder.Invoke(auditEvent);
                if (accessTier.HasValue)
                {
                    await blob.SetStandardBlobTierAsync(accessTier.Value);
                }
            }
        }
        private async Task <string> UploadAsync(BlobContainerClient client, AuditEvent auditEvent, string existingBlobName)
        {
            var blobName = existingBlobName ?? BlobNameBuilder?.Invoke(auditEvent) ?? string.Format("{0}.json", Guid.NewGuid());
            var blob     = client.GetBlobClient(blobName);
            var options  = new BlobUploadOptions()
            {
                Metadata   = MetadataBuilder?.Invoke(auditEvent),
                AccessTier = AccessTierBuilder?.Invoke(auditEvent)
            };

#if NETSTANDARD2_0
            await blob.UploadAsync(new BinaryData(auditEvent, JsonSettings), options);
#else
            await blob.UploadAsync(new BinaryData(auditEvent, Core.Configuration.JsonSettings), options);
#endif
            return(blobName);
        }