Skip to content

Commit 77e2dc0

Browse files
Remove redundant code and calls in DI extension methods
1 parent 87cca72 commit 77e2dc0

File tree

3 files changed

+90
-186
lines changed

3 files changed

+90
-186
lines changed
Lines changed: 37 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using Microsoft.Extensions.DependencyInjection;
33
using Microsoft.Extensions.DependencyInjection.Extensions;
4+
using Microsoft.Extensions.Options;
45
using Umbraco.StorageProviders.AzureBlob.IO;
56

67
// ReSharper disable once CheckNamespace
@@ -12,101 +13,77 @@ namespace Umbraco.Cms.Core.DependencyInjection
1213
/// </summary>
1314
public static class AzureBlobFileSystemExtensions
1415
{
16+
internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, string name, Action<OptionsBuilder<AzureBlobFileSystemOptions>>? configure = null)
17+
{
18+
ArgumentNullException.ThrowIfNull(builder);
19+
ArgumentNullException.ThrowIfNull(name);
20+
21+
builder.Services.TryAddSingleton<IAzureBlobFileSystemProvider, AzureBlobFileSystemProvider>();
22+
23+
var optionsBuilder = builder.Services.AddOptions<AzureBlobFileSystemOptions>(name)
24+
.BindConfiguration($"Umbraco:Storage:AzureBlob:{name}")
25+
.ValidateDataAnnotations();
26+
27+
configure?.Invoke(optionsBuilder);
28+
29+
return builder;
30+
}
31+
1532
/// <summary>
1633
/// Registers a <see cref="IAzureBlobFileSystem" /> in the <see cref="IServiceCollection" />, with it's configuration
1734
/// loaded from <c>Umbraco:Storage:AzureBlob:{name}</c> where {name} is the value of the <paramref name="name" /> parameter.
1835
/// </summary>
1936
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
2037
/// <param name="name">The name of the file system.</param>
21-
/// <param name="path">The path to map the filesystem to.</param>
2238
/// <returns>
2339
/// The <see cref="IUmbracoBuilder" />.
2440
/// </returns>
2541
/// <exception cref="System.ArgumentNullException">builder
2642
/// or
2743
/// name</exception>
2844
/// <exception cref="System.ArgumentException">Value cannot be null or whitespace. - path</exception>
29-
public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, string path)
30-
{
31-
if (builder == null) throw new ArgumentNullException(nameof(builder));
32-
if (name == null) throw new ArgumentNullException(nameof(name));
33-
if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(path));
34-
35-
builder.Services.TryAddSingleton<IAzureBlobFileSystemProvider, AzureBlobFileSystemProvider>();
36-
37-
builder.Services
38-
.AddOptions<AzureBlobFileSystemOptions>(name)
39-
.BindConfiguration($"Umbraco:Storage:AzureBlob:{name}")
40-
.Configure(options => options.VirtualPath = path)
41-
.ValidateDataAnnotations();
42-
43-
return builder;
44-
}
45+
public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name)
46+
=> builder.AddInternal(name);
4547

4648
/// <summary>
4749
/// Registers a <see cref="IAzureBlobFileSystem" /> in the <see cref="IServiceCollection" />, with it's configuration
4850
/// loaded from <c>Umbraco:Storage:AzureBlob:{name}</c> where {name} is the value of the <paramref name="name" /> parameter.
4951
/// </summary>
5052
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
5153
/// <param name="name">The name of the file system.</param>
52-
/// <param name="path">The path to map the filesystem to.</param>
5354
/// <param name="configure">An action used to configure the <see cref="AzureBlobFileSystemOptions" />.</param>
5455
/// <returns>
5556
/// The <see cref="IUmbracoBuilder" />.
5657
/// </returns>
57-
/// <exception cref="System.ArgumentNullException">builder
58-
/// or
59-
/// name
60-
/// or
61-
/// configure</exception>
62-
/// <exception cref="System.ArgumentException">Value cannot be null or whitespace. - path</exception>
63-
public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, string path, Action<AzureBlobFileSystemOptions> configure)
64-
{
65-
if (builder == null) throw new ArgumentNullException(nameof(builder));
66-
if (name == null) throw new ArgumentNullException(nameof(name));
67-
if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(path));
68-
if (configure == null) throw new ArgumentNullException(nameof(configure));
69-
70-
AddAzureBlobFileSystem(builder, name, path);
71-
72-
builder.Services
73-
.AddOptions<AzureBlobFileSystemOptions>(name)
74-
.Configure(configure);
75-
76-
return builder;
77-
}
58+
public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, Action<AzureBlobFileSystemOptions> configure)
59+
=> builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure));
7860

7961
/// <summary>
8062
/// Registers a <see cref="IAzureBlobFileSystem" /> in the <see cref="IServiceCollection" />, with it's configuration
8163
/// loaded from <c>Umbraco:Storage:AzureBlob:{name}</c> where {name} is the value of the <paramref name="name" /> parameter.
8264
/// </summary>
8365
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
8466
/// <param name="name">The name of the file system.</param>
85-
/// <param name="path">The path to map the filesystem to.</param>
8667
/// <param name="configure">An action used to configure the <see cref="AzureBlobFileSystemOptions" />.</param>
8768
/// <returns>
8869
/// The <see cref="IUmbracoBuilder" />.
8970
/// </returns>
90-
/// <exception cref="System.ArgumentNullException">builder
91-
/// or
92-
/// name
93-
/// or
94-
/// configure</exception>
95-
/// <exception cref="System.ArgumentException">Value cannot be null or whitespace. - path</exception>
96-
public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, string path, Action<AzureBlobFileSystemOptions, IServiceProvider> configure)
97-
{
98-
if (builder == null) throw new ArgumentNullException(nameof(builder));
99-
if (name == null) throw new ArgumentNullException(nameof(name));
100-
if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(path));
101-
if (configure == null) throw new ArgumentNullException(nameof(configure));
102-
103-
AddAzureBlobFileSystem(builder, name, path);
104-
105-
builder.Services
106-
.AddOptions<AzureBlobFileSystemOptions>(name)
107-
.Configure(configure);
71+
public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, Action<AzureBlobFileSystemOptions, IServiceProvider> configure)
72+
=> builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure));
10873

109-
return builder;
110-
}
74+
/// <summary>
75+
/// Registers a <see cref="IAzureBlobFileSystem" /> in the <see cref="IServiceCollection" />, with it's configuration
76+
/// loaded from <c>Umbraco:Storage:AzureBlob:{name}</c> where {name} is the value of the <paramref name="name" /> parameter.
77+
/// </summary>
78+
/// <typeparam name="TDep">A dependency used by the configure action.</typeparam>
79+
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
80+
/// <param name="name">The name of the file system.</param>
81+
/// <param name="configure">An action used to configure the <see cref="AzureBlobFileSystemOptions" />.</param>
82+
/// <returns>
83+
/// The <see cref="IUmbracoBuilder" />.
84+
/// </returns>
85+
public static IUmbracoBuilder AddAzureBlobFileSystem<TDep>(this IUmbracoBuilder builder, string name, Action<AzureBlobFileSystemOptions, TDep> configure)
86+
where TDep : class
87+
=> builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure));
11188
}
11289
}

src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs

Lines changed: 23 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using Microsoft.Extensions.DependencyInjection;
33
using Microsoft.Extensions.Options;
44
using SixLabors.ImageSharp.Web.Caching;
5-
using SixLabors.ImageSharp.Web.Providers;
65
using Umbraco.Cms.Core.Configuration.Models;
76
using Umbraco.Cms.Infrastructure.DependencyInjection;
87
using Umbraco.Extensions;
@@ -18,136 +17,74 @@ namespace Umbraco.Cms.Core.DependencyInjection
1817
/// </summary>
1918
public static class AzureBlobMediaFileSystemExtensions
2019
{
21-
/// <summary>
22-
/// Registers an <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
23-
/// </summary>
24-
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
25-
/// <returns>
26-
/// The <see cref="IUmbracoBuilder" />.
27-
/// </returns>
28-
/// <remarks>
29-
/// This will also configure the ImageSharp.Web middleware to use Azure Blob Storage to retrieve the original and cache the processed images.
30-
/// </remarks>
31-
/// <exception cref="System.ArgumentNullException">builder</exception>
32-
public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder)
33-
=> builder.AddAzureBlobMediaFileSystem(true);
34-
35-
/// <summary>
36-
/// Registers an <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
37-
/// </summary>
38-
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
39-
/// <param name="useAzureBlobImageCache">If set to <c>true</c> also configures Azure Blob Storage for the image cache.</param>
40-
/// <returns>
41-
/// The <see cref="IUmbracoBuilder" />.
42-
/// </returns>
43-
/// <exception cref="System.ArgumentNullException">builder</exception>
44-
public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache)
20+
internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, bool useAzureBlobImageCache, Action<OptionsBuilder<AzureBlobFileSystemOptions>>? configure = null)
4521
{
46-
if (builder == null) throw new ArgumentNullException(nameof(builder));
22+
ArgumentNullException.ThrowIfNull(builder);
4723

48-
builder.AddAzureBlobFileSystem(AzureBlobFileSystemOptions.MediaFileSystemName, "~/media",
49-
(options, provider) =>
50-
{
51-
var globalSettingsOptions = provider.GetRequiredService<IOptions<GlobalSettings>>();
52-
options.VirtualPath = globalSettingsOptions.Value.UmbracoMediaPath;
53-
});
24+
builder.AddInternal(AzureBlobFileSystemOptions.MediaFileSystemName, optionsBuilder =>
25+
{
26+
optionsBuilder.Configure<IOptions<GlobalSettings>>((options, globalSettings) => options.VirtualPath = globalSettings.Value.UmbracoMediaPath);
27+
configure?.Invoke(optionsBuilder);
28+
});
5429

5530
// ImageSharp image cache
5631
if (useAzureBlobImageCache)
5732
{
5833
builder.Services.AddUnique<IImageCache, AzureBlobFileSystemImageCache>();
5934
}
6035

61-
builder.SetMediaFileSystem(provider => provider.GetRequiredService<IAzureBlobFileSystemProvider>()
62-
.GetFileSystem(AzureBlobFileSystemOptions.MediaFileSystemName));
36+
builder.SetMediaFileSystem(provider => provider.GetRequiredService<IAzureBlobFileSystemProvider>().GetFileSystem(AzureBlobFileSystemOptions.MediaFileSystemName));
6337

6438
return builder;
6539
}
6640

6741
/// <summary>
68-
/// Registers a <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
42+
/// Registers an <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
6943
/// </summary>
7044
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
71-
/// <param name="configure">An action used to configure the <see cref="AzureBlobFileSystemOptions" />.</param>
45+
/// <param name="useAzureBlobImageCache">If set to <c>true</c> also configures Azure Blob Storage for the image cache.</param>
7246
/// <returns>
7347
/// The <see cref="IUmbracoBuilder" />.
7448
/// </returns>
75-
/// <remarks>
76-
/// This will also configure the ImageSharp.Web middleware to use Azure Blob Storage to retrieve the original and cache the processed images.
77-
/// </remarks>
78-
/// <exception cref="System.ArgumentNullException">builder
79-
/// or
80-
/// configure</exception>
81-
public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, Action<AzureBlobFileSystemOptions> configure)
82-
=> builder.AddAzureBlobMediaFileSystem(true, configure);
49+
public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache = true)
50+
=> builder.AddInternal(useAzureBlobImageCache);
8351

8452
/// <summary>
8553
/// Registers a <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
8654
/// </summary>
8755
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
88-
/// <param name="useAzureBlobImageCache">If set to <c>true</c> also configures Azure Blob Storage for the image cache.</param>
8956
/// <param name="configure">An action used to configure the <see cref="AzureBlobFileSystemOptions" />.</param>
57+
/// <param name="useAzureBlobImageCache">If set to <c>true</c> also configures Azure Blob Storage for the image cache.</param>
9058
/// <returns>
9159
/// The <see cref="IUmbracoBuilder" />.
9260
/// </returns>
93-
/// <exception cref="System.ArgumentNullException">builder
94-
/// or
95-
/// configure</exception>
96-
public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache, Action<AzureBlobFileSystemOptions> configure)
97-
{
98-
if (builder == null) throw new ArgumentNullException(nameof(builder));
99-
if (configure == null) throw new ArgumentNullException(nameof(configure));
100-
101-
AddAzureBlobMediaFileSystem(builder, useAzureBlobImageCache);
102-
103-
builder.Services
104-
.AddOptions<AzureBlobFileSystemOptions>(AzureBlobFileSystemOptions.MediaFileSystemName)
105-
.Configure(configure);
106-
107-
return builder;
108-
}
61+
public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, Action<AzureBlobFileSystemOptions> configure, bool useAzureBlobImageCache = true)
62+
=> builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure));
10963

11064
/// <summary>
11165
/// Registers a <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
11266
/// </summary>
11367
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
11468
/// <param name="configure">An action used to configure the <see cref="AzureBlobFileSystemOptions" />.</param>
69+
/// <param name="useAzureBlobImageCache">If set to <c>true</c> also configures Azure Blob Storage for the image cache.</param>
11570
/// <returns>
11671
/// The <see cref="IUmbracoBuilder" />.
11772
/// </returns>
118-
/// <remarks>
119-
/// This will also configure the ImageSharp.Web middleware to use Azure Blob Storage to retrieve the original and cache the processed images.
120-
/// </remarks>
121-
/// <exception cref="System.ArgumentNullException">builder
122-
/// or
123-
/// configure</exception>
124-
public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, Action<AzureBlobFileSystemOptions, IServiceProvider> configure)
125-
=> builder.AddAzureBlobMediaFileSystem(true, configure);
73+
public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, Action<AzureBlobFileSystemOptions, IServiceProvider> configure, bool useAzureBlobImageCache = true)
74+
=> builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure));
12675

12776
/// <summary>
12877
/// Registers a <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
12978
/// </summary>
79+
/// <typeparam name="TDep">A dependency used by the configure action.</typeparam>
13080
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
131-
/// <param name="useAzureBlobImageCache">If set to <c>true</c> also configures Azure Blob Storage for the image cache.</param>
13281
/// <param name="configure">An action used to configure the <see cref="AzureBlobFileSystemOptions" />.</param>
82+
/// <param name="useAzureBlobImageCache">If set to <c>true</c> also configures Azure Blob Storage for the image cache.</param>
13383
/// <returns>
13484
/// The <see cref="IUmbracoBuilder" />.
13585
/// </returns>
136-
/// <exception cref="System.ArgumentNullException">builder
137-
/// or
138-
/// configure</exception>
139-
public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache, Action<AzureBlobFileSystemOptions, IServiceProvider> configure)
140-
{
141-
if (builder == null) throw new ArgumentNullException(nameof(builder));
142-
if (configure == null) throw new ArgumentNullException(nameof(configure));
143-
144-
AddAzureBlobMediaFileSystem(builder, useAzureBlobImageCache);
145-
146-
builder.Services
147-
.AddOptions<AzureBlobFileSystemOptions>(AzureBlobFileSystemOptions.MediaFileSystemName)
148-
.Configure(configure);
149-
150-
return builder;
151-
}
86+
public static IUmbracoBuilder AddAzureBlobFileSystem<TDep>(this IUmbracoBuilder builder, Action<AzureBlobFileSystemOptions, TDep> configure, bool useAzureBlobImageCache = true)
87+
where TDep : class
88+
=> builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure));
15289
}
15390
}

0 commit comments

Comments
 (0)