Skip to content

Commit a78344c

Browse files
committed
- Use Singlton lifetime for all registered optimizer services.
- Add IServiceCollection extendion methods: AddDefaultOptimizerSelector, and AddDefaultMinifiers. - Refactor code that creates DefaultOptimizerSelector into a factory class.
1 parent 76ea294 commit a78344c

File tree

4 files changed

+91
-40
lines changed

4 files changed

+91
-40
lines changed

src/AspNetStatic/AspNetStatic.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<Product>AspNetStatic</Product>
2929
<Copyright>Copyright 2023-2025 Zareh DerGevorkian. All rights reserved</Copyright>
3030
<Description>Transforms ASP.NET Core into a static site generator.</Description>
31-
<Version>0.26.1</Version>
31+
<Version>0.26.2</Version>
3232
</PropertyGroup>
3333

3434
<ItemGroup>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*--------------------------------------------------------------------------------------------------------------------------------
2+
Copyright 2023-2025 Zareh DerGevorkian
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
7+
8+
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
9+
on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for
10+
the specific language governing permissions and limitations under the License.
11+
--------------------------------------------------------------------------------------------------------------------------------*/
12+
13+
using Microsoft.Extensions.DependencyInjection;
14+
using WebMarkupMin.Core;
15+
16+
namespace AspNetStatic.Optimizer;
17+
18+
public static class DefaultOptimizerSelectorFactory
19+
{
20+
public static IOptimizerSelector Create(IServiceProvider services)
21+
{
22+
var markupOptimizer = services.GetService<IMarkupOptimizer>();
23+
var cssOptimizer = services.GetService<ICssOptimizer>();
24+
var jsOptimizer = services.GetService<IJsOptimizer>();
25+
var binOptimizer = services.GetService<IBinOptimizer>() ?? new NullBinOptimizer();
26+
27+
var cssMinifier = services.GetService<ICssMinifier>();
28+
var jsMinifier = services.GetService<IJsMinifier>();
29+
30+
if ((markupOptimizer is null) || (cssOptimizer is null) || (jsOptimizer is null))
31+
{
32+
cssMinifier ??= new KristensenCssMinifier();
33+
jsMinifier ??= new CrockfordJsMinifier();
34+
}
35+
36+
markupOptimizer ??= new DefaultMarkupOptimizer(
37+
services.GetService<HtmlMinificationSettings>(),
38+
services.GetService<XhtmlMinificationSettings>(),
39+
services.GetService<XmlMinificationSettings>(),
40+
cssMinifier, jsMinifier);
41+
42+
cssOptimizer ??= new DefaultCssOptimizer(cssMinifier!);
43+
44+
jsOptimizer ??= new DefaultJsOptimizer(jsMinifier!);
45+
46+
return
47+
new DefaultOptimizerSelector(
48+
markupOptimizer,
49+
cssOptimizer,
50+
jsOptimizer,
51+
binOptimizer);
52+
}
53+
}

src/AspNetStatic/Optimizer/RegisterDefaultOptimizers.cs

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,50 @@ the specific language governing permissions and limitations under the License.
1111
--------------------------------------------------------------------------------------------------------------------------------*/
1212

1313
using Microsoft.Extensions.DependencyInjection;
14+
using WebMarkupMin.Core;
1415

1516
namespace AspNetStatic.Optimizer;
1617

1718
public static class RegisterDefaultOptimizers
1819
{
20+
public static IServiceCollection AddDefaultOptimizerSelector(
21+
this IServiceCollection services)
22+
{
23+
Throw.IfNull(services);
24+
25+
services
26+
.AddSingleton<IOptimizerSelector, DefaultOptimizerSelector>()
27+
.AddDefaultOptimizers()
28+
;
29+
30+
return services;
31+
}
32+
1933
public static IServiceCollection AddDefaultOptimizers(
2034
this IServiceCollection services)
2135
{
2236
Throw.IfNull(services);
2337

2438
services
25-
.AddTransient<IMarkupOptimizer, DefaultMarkupOptimizer>()
26-
.AddTransient<ICssOptimizer, DefaultCssOptimizer>()
27-
.AddTransient<IJsOptimizer, DefaultJsOptimizer>()
28-
.AddTransient<IBinOptimizer, NullBinOptimizer>()
39+
.AddSingleton<IMarkupOptimizer, DefaultMarkupOptimizer>()
40+
.AddSingleton<ICssOptimizer, DefaultCssOptimizer>()
41+
.AddSingleton<IJsOptimizer, DefaultJsOptimizer>()
42+
.AddSingleton<IBinOptimizer, NullBinOptimizer>()
43+
;
44+
45+
services.AddDefaultMinifiers();
46+
47+
return services;
48+
}
49+
50+
public static IServiceCollection AddDefaultMinifiers(
51+
this IServiceCollection services)
52+
{
53+
Throw.IfNull(services);
54+
55+
services
56+
.AddSingleton<ICssMinifier, KristensenCssMinifier>()
57+
.AddSingleton<IJsMinifier, CrockfordJsMinifier>()
2958
;
3059

3160
return services;

src/AspNetStatic/StaticGeneratorHostExtension.cs

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -658,41 +658,10 @@ private static HttpClient GetHttpClient(IHost host, string? httpClientName, ulon
658658
{
659659
if (dontOptimizeContent) return null;
660660

661-
var result = services.GetService<IOptimizerSelector>();
662-
663-
if (result is null)
664-
{
665-
var markupOptimizer = services.GetService<IMarkupOptimizer>();
666-
var cssOptimizer = services.GetService<ICssOptimizer>();
667-
var jsOptimizer = services.GetService<IJsOptimizer>();
668-
var binOptimizer = services.GetService<IBinOptimizer>() ?? new NullBinOptimizer();
669-
670-
var cssMinifier = services.GetService<ICssMinifier>();
671-
var jsMinifier = services.GetService<IJsMinifier>();
672-
673-
if ((markupOptimizer is null) ||
674-
(cssOptimizer is null) ||
675-
(jsOptimizer is null))
676-
{
677-
cssMinifier ??= new KristensenCssMinifier();
678-
jsMinifier ??= new CrockfordJsMinifier();
679-
}
680-
681-
markupOptimizer ??= new DefaultMarkupOptimizer(
682-
services.GetService<HtmlMinificationSettings>(),
683-
services.GetService<XhtmlMinificationSettings>(),
684-
services.GetService<XmlMinificationSettings>(),
685-
cssMinifier, jsMinifier);
686-
cssOptimizer ??= new DefaultCssOptimizer(cssMinifier!);
687-
jsOptimizer ??= new DefaultJsOptimizer(jsMinifier!);
688-
689-
result =
690-
new DefaultOptimizerSelector(
691-
markupOptimizer,
692-
cssOptimizer,
693-
jsOptimizer,
694-
binOptimizer);
695-
}
661+
var result =
662+
services.GetService<IOptimizerSelector>() ??
663+
DefaultOptimizerSelectorFactory.Create(services)
664+
;
696665

697666
return result;
698667
}

0 commit comments

Comments
 (0)