Skip to content

Commit eec9fe8

Browse files
Merge pull request #110 from SixLabors/js/code-quality-2
Simplify middleware workflow.
2 parents fc1721b + 6e330b8 commit eec9fe8

File tree

7 files changed

+315
-210
lines changed

7 files changed

+315
-210
lines changed

src/ImageSharp.Web.Providers.Azure/Providers/AzureBlobStorageImageProvider.cs

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using Microsoft.AspNetCore.Http;
99
using Microsoft.AspNetCore.Http.Extensions;
1010
using Microsoft.Extensions.Options;
11-
using Microsoft.IO;
1211
using SixLabors.ImageSharp.Web.Resolvers;
1312
using SixLabors.ImageSharp.Web.Resolvers.Azure;
1413

@@ -35,12 +34,6 @@ private readonly Dictionary<string, BlobContainerClient> containers
3534
/// </summary>
3635
private readonly AzureBlobStorageImageProviderOptions storageOptions;
3736

38-
/// <summary>
39-
/// The recyclable memorystream manager used for managing pooled stream
40-
/// buffers independently from image buffer pooling.
41-
/// </summary>
42-
private readonly RecyclableMemoryStreamManager memoryStreamManager;
43-
4437
/// <summary>
4538
/// Contains various helper methods based on the current configuration.
4639
/// </summary>
@@ -55,21 +48,14 @@ private readonly Dictionary<string, BlobContainerClient> containers
5548
/// Initializes a new instance of the <see cref="AzureBlobStorageImageProvider"/> class.
5649
/// </summary>
5750
/// <param name="storageOptions">The blob storage options.</param>
58-
/// <param name="memoryStreamManager">
59-
/// The recyclable memorystream manager used for managing pooled stream
60-
/// buffers independently from image buffer pooling.
61-
/// </param>
6251
/// <param name="formatUtilities">Contains various format helper methods based on the current configuration.</param>
6352
public AzureBlobStorageImageProvider(
6453
IOptions<AzureBlobStorageImageProviderOptions> storageOptions,
65-
RecyclableMemoryStreamManager memoryStreamManager,
6654
FormatUtilities formatUtilities)
6755
{
6856
Guard.NotNull(storageOptions, nameof(storageOptions));
69-
Guard.NotNull(memoryStreamManager, nameof(memoryStreamManager));
7057

7158
this.storageOptions = storageOptions.Value;
72-
this.memoryStreamManager = memoryStreamManager;
7359
this.formatUtilities = formatUtilities;
7460

7561
foreach (AzureBlobContainerClientOptions container in this.storageOptions.BlobContainers)
@@ -136,7 +122,7 @@ public async Task<IImageResolver> GetAsync(HttpContext context)
136122
return null;
137123
}
138124

139-
return new AzureBlobStorageImageResolver(blob, this.memoryStreamManager);
125+
return new AzureBlobStorageImageResolver(blob);
140126
}
141127

142128
/// <inheritdoc/>
Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
// Copyright (c) Six Labors.
22
// Licensed under the Apache License, Version 2.0.
33

4-
using System;
54
using System.IO;
65
using System.Threading.Tasks;
76
using Azure;
87
using Azure.Storage.Blobs;
98
using Azure.Storage.Blobs.Models;
10-
using Microsoft.IO;
119

1210
namespace SixLabors.ImageSharp.Web.Resolvers.Azure
1311
{
@@ -16,42 +14,25 @@ namespace SixLabors.ImageSharp.Web.Resolvers.Azure
1614
/// </summary>
1715
public class AzureBlobStorageImageResolver : IImageResolver
1816
{
19-
private readonly RecyclableMemoryStreamManager memoryStreamManager;
2017
private readonly BlobClient blob;
2118

2219
/// <summary>
2320
/// Initializes a new instance of the <see cref="AzureBlobStorageImageResolver"/> class.
2421
/// </summary>
2522
/// <param name="blob">The Azure blob.</param>
26-
/// <param name="memoryStreamManager">
27-
/// The recyclable memorystream manager used for managing pooled stream
28-
/// buffers independently from image buffer pooling.
29-
/// </param>
30-
public AzureBlobStorageImageResolver(BlobClient blob, RecyclableMemoryStreamManager memoryStreamManager)
31-
{
32-
this.blob = blob;
33-
this.memoryStreamManager = memoryStreamManager;
34-
}
23+
public AzureBlobStorageImageResolver(BlobClient blob) => this.blob = blob;
3524

3625
/// <inheritdoc/>
3726
public async Task<ImageMetadata> GetMetaDataAsync()
3827
{
28+
// I've had a good read through the SDK source and I believe we cannot get
29+
// a 304 here since 'If-Modified-Since' header is not set by default.
3930
Response<BlobProperties> properties = await this.blob.GetPropertiesAsync();
40-
return new ImageMetadata(properties?.Value.LastModified.DateTime ?? DateTime.UtcNow);
31+
return new ImageMetadata(properties.Value.LastModified.DateTime);
4132
}
4233

4334
/// <inheritdoc/>
4435
public async Task<Stream> OpenReadAsync()
45-
{
46-
// Copy to a MemoryStream first because RetriableStreamImpl
47-
// doesn't support Position.
48-
Stream blobStream = (await this.blob.DownloadAsync()).Value.Content;
49-
var memoryStream = new RecyclableMemoryStream(this.memoryStreamManager);
50-
51-
await blobStream.CopyToAsync(memoryStream);
52-
memoryStream.Seek(0, SeekOrigin.Begin);
53-
54-
return memoryStream;
55-
}
36+
=> (await this.blob.DownloadAsync()).Value.Content;
5637
}
5738
}

src/ImageSharp.Web/DependencyInjection/ImageSharpCoreBuilderExtensions.cs

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using Microsoft.Extensions.DependencyInjection;
99
using Microsoft.Extensions.DependencyInjection.Extensions;
1010
using Microsoft.Extensions.Options;
11-
using Microsoft.IO;
1211
using SixLabors.ImageSharp.Memory;
1312
using SixLabors.ImageSharp.Web.Caching;
1413
using SixLabors.ImageSharp.Web.Commands;
@@ -275,35 +274,6 @@ static MemoryAllocator AllocatorFactory(IServiceProvider s)
275274
return builder;
276275
}
277276

278-
/// <summary>
279-
/// Sets the <see cref="RecyclableMemoryStream"/> configured in <see cref="ImageSharpMiddlewareOptions"/>.
280-
/// </summary>
281-
/// <param name="builder">The core builder.</param>
282-
/// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
283-
internal static IImageSharpBuilder SetMemoryStreamManagerFromMiddlewareOptions(this IImageSharpBuilder builder)
284-
{
285-
static RecyclableMemoryStreamManager AllocatorFactory(IServiceProvider s)
286-
{
287-
return s.GetRequiredService<IOptions<ImageSharpMiddlewareOptions>>().Value.MemoryStreamManager;
288-
}
289-
290-
builder.SetMemoryStreamManager(AllocatorFactory);
291-
return builder;
292-
}
293-
294-
/// <summary>
295-
/// Sets the given <see cref="RecyclableMemoryStreamManager"/> adding it to the service collection.
296-
/// </summary>
297-
/// <param name="builder">The core builder.</param>
298-
/// <param name="implementationFactory">The factory method for returning a <see cref="RecyclableMemoryStreamManager"/>.</param>
299-
/// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
300-
private static IImageSharpBuilder SetMemoryStreamManager(this IImageSharpBuilder builder, Func<IServiceProvider, RecyclableMemoryStreamManager> implementationFactory)
301-
{
302-
var descriptor = new ServiceDescriptor(typeof(RecyclableMemoryStreamManager), implementationFactory, ServiceLifetime.Singleton);
303-
builder.Services.Replace(descriptor);
304-
return builder;
305-
}
306-
307277
/// <summary>
308278
/// Sets the <see cref="FormatUtilities"/> configured by <see cref="ImageSharpMiddlewareOptions.Configuration"/>.
309279
/// </summary>

src/ImageSharp.Web/DependencyInjection/ServiceCollectionExtensions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ public static IImageSharpBuilder AddImageSharpCore(this IServiceCollection servi
6565
builder.Services.Configure(setupAction);
6666

6767
builder.SetMemoryAllocatorFromMiddlewareOptions();
68-
builder.SetMemoryStreamManagerFromMiddlewareOptions();
6968
builder.SetFormatUtilitesFromMiddlewareOptions();
7069

7170
return builder;

0 commit comments

Comments
 (0)