2
2
using Microsoft . Extensions . DependencyInjection ;
3
3
using Microsoft . Extensions . Options ;
4
4
using SixLabors . ImageSharp . Web . Caching ;
5
- using SixLabors . ImageSharp . Web . Providers ;
6
5
using Umbraco . Cms . Core . Configuration . Models ;
7
6
using Umbraco . Cms . Infrastructure . DependencyInjection ;
8
7
using Umbraco . Extensions ;
@@ -18,136 +17,74 @@ namespace Umbraco.Cms.Core.DependencyInjection
18
17
/// </summary>
19
18
public static class AzureBlobMediaFileSystemExtensions
20
19
{
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 )
45
21
{
46
- if ( builder == null ) throw new ArgumentNullException ( nameof ( builder ) ) ;
22
+ ArgumentNullException . ThrowIfNull ( builder ) ;
47
23
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
+ } ) ;
54
29
55
30
// ImageSharp image cache
56
31
if ( useAzureBlobImageCache )
57
32
{
58
33
builder . Services . AddUnique < IImageCache , AzureBlobFileSystemImageCache > ( ) ;
59
34
}
60
35
61
- builder . SetMediaFileSystem ( provider => provider . GetRequiredService < IAzureBlobFileSystemProvider > ( )
62
- . GetFileSystem ( AzureBlobFileSystemOptions . MediaFileSystemName ) ) ;
36
+ builder . SetMediaFileSystem ( provider => provider . GetRequiredService < IAzureBlobFileSystemProvider > ( ) . GetFileSystem ( AzureBlobFileSystemOptions . MediaFileSystemName ) ) ;
63
37
64
38
return builder ;
65
39
}
66
40
67
41
/// <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.
69
43
/// </summary>
70
44
/// <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>
72
46
/// <returns>
73
47
/// The <see cref="IUmbracoBuilder" />.
74
48
/// </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 ) ;
83
51
84
52
/// <summary>
85
53
/// Registers a <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
86
54
/// </summary>
87
55
/// <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>
89
56
/// <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>
90
58
/// <returns>
91
59
/// The <see cref="IUmbracoBuilder" />.
92
60
/// </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 ) ) ;
109
63
110
64
/// <summary>
111
65
/// Registers a <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
112
66
/// </summary>
113
67
/// <param name="builder">The <see cref="IUmbracoBuilder" />.</param>
114
68
/// <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>
115
70
/// <returns>
116
71
/// The <see cref="IUmbracoBuilder" />.
117
72
/// </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 ) ) ;
126
75
127
76
/// <summary>
128
77
/// Registers a <see cref="IAzureBlobFileSystem" /> and it's dependencies configured for media.
129
78
/// </summary>
79
+ /// <typeparam name="TDep">A dependency used by the configure action.</typeparam>
130
80
/// <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>
132
81
/// <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>
133
83
/// <returns>
134
84
/// The <see cref="IUmbracoBuilder" />.
135
85
/// </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 ) ) ;
152
89
}
153
90
}
0 commit comments