Skip to content
This repository was archived by the owner on Jan 17, 2022. It is now read-only.

Commit 1797fe4

Browse files
Added support for wasm hosts (#311)
1 parent b7ad70a commit 1797fe4

14 files changed

Lines changed: 362 additions & 37 deletions

Autofac.Extensions.sln

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rocket.Surgery.Hosting.Auto
2525
EndProject
2626
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rocket.Surgery.Conventions.Autofac", "src\Conventions.Autofac\Rocket.Surgery.Conventions.Autofac.csproj", "{60A0E161-8AB6-40DA-BFB4-8CFB77547ACB}"
2727
EndProject
28+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rocket.Surgery.WebAssembly.Hosting.Autofac", "src\WebAssembly.Hosting.Autofac\Rocket.Surgery.WebAssembly.Hosting.Autofac.csproj", "{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}"
29+
EndProject
2830
Global
2931
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3032
Debug|Any CPU = Debug|Any CPU
@@ -81,6 +83,18 @@ Global
8183
{60A0E161-8AB6-40DA-BFB4-8CFB77547ACB}.Release|x64.Build.0 = Release|Any CPU
8284
{60A0E161-8AB6-40DA-BFB4-8CFB77547ACB}.Release|x86.ActiveCfg = Release|Any CPU
8385
{60A0E161-8AB6-40DA-BFB4-8CFB77547ACB}.Release|x86.Build.0 = Release|Any CPU
86+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
87+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Debug|Any CPU.Build.0 = Debug|Any CPU
88+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Debug|x64.ActiveCfg = Debug|Any CPU
89+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Debug|x64.Build.0 = Debug|Any CPU
90+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Debug|x86.ActiveCfg = Debug|Any CPU
91+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Debug|x86.Build.0 = Debug|Any CPU
92+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Release|Any CPU.ActiveCfg = Release|Any CPU
93+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Release|Any CPU.Build.0 = Release|Any CPU
94+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Release|x64.ActiveCfg = Release|Any CPU
95+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Release|x64.Build.0 = Release|Any CPU
96+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Release|x86.ActiveCfg = Release|Any CPU
97+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171}.Release|x86.Build.0 = Release|Any CPU
8498
EndGlobalSection
8599
GlobalSection(SolutionProperties) = preSolution
86100
HideSolutionNode = FALSE
@@ -90,6 +104,7 @@ Global
90104
{9C1B873C-FE6E-492D-ACFA-AF752B927D2A} = {DF33E0FB-9790-4654-B60F-8AB22E0CC3D1}
91105
{92563742-792D-4E79-B9F2-7F16BEB63989} = {8FFDF555-DB50-45F9-9A2D-6410F39151C3}
92106
{60A0E161-8AB6-40DA-BFB4-8CFB77547ACB} = {8FFDF555-DB50-45F9-9A2D-6410F39151C3}
107+
{0CB5A766-76E4-445D-B7FF-7AA6F42F2171} = {8FFDF555-DB50-45F9-9A2D-6410F39151C3}
93108
EndGlobalSection
94109
GlobalSection(ExtensibilityGlobals) = postSolution
95110
SolutionGuid = {439897C2-CCBD-44FE-B2DC-A3E4670ADA59}

Packages.props

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<PackageReference Update="JetBrains.ReSharper.CommandLineTools" Version="2020.2.1" />
1818
<PackageReference Update="Nuke.Common" Version="0.25.0-alpha0334" />
1919
<PackageReference Update="ReportGenerator" Version="4.6.5" />
20-
<PackageReference Update="Rocket.Surgery.Nuke" Version="0.14.0-beta.8" />
20+
<PackageReference Update="Rocket.Surgery.Nuke" Version="0.14.0-beta.9" />
2121
</ItemGroup>
2222
<ItemGroup>
2323
<PackageReference Update="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.5" />
@@ -29,15 +29,16 @@
2929
<ItemGroup>
3030
<PackageReference Update="Autofac" Version="5.2.0" />
3131
<PackageReference Update="Autofac.Extensions.DependencyInjection" Version="6.0.0" />
32-
<PackageReference Update="Rocket.Surgery.Conventions" Version="10.0.0-beta.13" />
33-
<PackageReference Update="Rocket.Surgery.Conventions.Abstractions" Version="10.0.0-beta.13" />
34-
<PackageReference Update="Rocket.Surgery.Hosting" Version="10.0.0-beta.13" />
32+
<PackageReference Update="Rocket.Surgery.Conventions" Version="10.0.0-beta.16" />
33+
<PackageReference Update="Rocket.Surgery.Conventions.Abstractions" Version="10.0.0-beta.16" />
34+
<PackageReference Update="Rocket.Surgery.Hosting" Version="10.0.0-beta.16" />
35+
<PackageReference Update="Rocket.Surgery.WebAssembly.Hosting" Version="10.0.0-beta.16" />
3536
</ItemGroup>
3637
<ItemGroup>
3738
<PackageReference Update="Bogus" Version="30.0.4" />
3839
<PackageReference Update="coverlet.collector" Version="1.3.0" />
3940
<PackageReference Update="coverlet.msbuild" Version="2.9.0" />
40-
<PackageReference Update="FakeItEasy" Version="6.2.0" />
41+
<PackageReference Update="FakeItEasy" Version="6.2.1" />
4142
<PackageReference Update="FakeItEasy.Analyzer.CSharp" Version="6.0.0" />
4243
<PackageReference Update="FluentAssertions" Version="5.10.3" />
4344
<PackageReference Update="FluentAssertions.Analyzers" Version="0.11.4" />

Readme.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
<!-- nuget packages -->
1919
| Package | NuGet |
2020
| ------- | ----- |
21-
| Rocket.Surgery.Hosting.Autofac | [![nuget-version-1dytjtzkv8qq-badge]![nuget-downloads-1dytjtzkv8qq-badge]][nuget-1dytjtzkv8qq] |
2221
| Rocket.Surgery.Conventions.Autofac | [![nuget-version-tfn88tvvpxea-badge]![nuget-downloads-tfn88tvvpxea-badge]][nuget-tfn88tvvpxea] |
22+
| Rocket.Surgery.Hosting.Autofac | [![nuget-version-1dytjtzkv8qq-badge]![nuget-downloads-1dytjtzkv8qq-badge]][nuget-1dytjtzkv8qq] |
23+
| Rocket.Surgery.WebAssembly.Hosting.Autofac | [![nuget-version-8vam8n7rou/q-badge]![nuget-downloads-8vam8n7rou/q-badge]][nuget-8vam8n7rou/q] |
2324
<!-- nuget packages -->
2425

2526
# Whats next?
@@ -40,12 +41,15 @@ TBD
4041
[github]: https://github.com/RocketSurgeonsGuild/Autofac.Extensions/actions?query=workflow%3Aci
4142
[github-badge]: https://img.shields.io/github/workflow/status/RocketSurgeonsGuild/Autofac.Extensions/ci.svg?label=github&logo=github&color=b845fc&logoColor=b845fc&style=flat "GitHub Actions Status"
4243
[github-history-badge]: https://buildstats.info/github/chart/RocketSurgeonsGuild/Autofac.Extensions?includeBuildsFromPullRequest=false "GitHub Actions History"
43-
[nuget-1dytjtzkv8qq]: https://www.nuget.org/packages/Rocket.Surgery.Hosting.Autofac/
44-
[nuget-version-1dytjtzkv8qq-badge]: https://img.shields.io/nuget/v/Rocket.Surgery.Hosting.Autofac.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
45-
[nuget-downloads-1dytjtzkv8qq-badge]: https://img.shields.io/nuget/dt/Rocket.Surgery.Hosting.Autofac.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
4644
[nuget-tfn88tvvpxea]: https://www.nuget.org/packages/Rocket.Surgery.Conventions.Autofac/
4745
[nuget-version-tfn88tvvpxea-badge]: https://img.shields.io/nuget/v/Rocket.Surgery.Conventions.Autofac.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
4846
[nuget-downloads-tfn88tvvpxea-badge]: https://img.shields.io/nuget/dt/Rocket.Surgery.Conventions.Autofac.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
47+
[nuget-1dytjtzkv8qq]: https://www.nuget.org/packages/Rocket.Surgery.Hosting.Autofac/
48+
[nuget-version-1dytjtzkv8qq-badge]: https://img.shields.io/nuget/v/Rocket.Surgery.Hosting.Autofac.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
49+
[nuget-downloads-1dytjtzkv8qq-badge]: https://img.shields.io/nuget/dt/Rocket.Surgery.Hosting.Autofac.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
50+
[nuget-8vam8n7rou/q]: https://www.nuget.org/packages/Rocket.Surgery.WebAssembly.Hosting.Autofac/
51+
[nuget-version-8vam8n7rou/q-badge]: https://img.shields.io/nuget/v/Rocket.Surgery.WebAssembly.Hosting.Autofac.svg?color=004880&logo=nuget&style=flat-square "NuGet Version"
52+
[nuget-downloads-8vam8n7rou/q-badge]: https://img.shields.io/nuget/dt/Rocket.Surgery.WebAssembly.Hosting.Autofac.svg?color=004880&logo=nuget&style=flat-square "NuGet Downloads"
4953
<!-- generated references -->
5054

5155
<!-- nuke-data

src/Conventions.Autofac/AutofacBuilder.cs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using Autofac.Extensions.DependencyInjection;
55
using Microsoft.Extensions.Configuration;
66
using Microsoft.Extensions.DependencyInjection;
7-
using Microsoft.Extensions.Hosting;
87
using Microsoft.Extensions.Logging;
98
using Rocket.Surgery.Conventions.Autofac.Internals;
109
using Rocket.Surgery.Conventions.DependencyInjection;
@@ -36,7 +35,6 @@ public class AutofacBuilder : ConventionBuilder<IAutofacBuilder, IAutofacConvent
3635
/// <summary>
3736
/// Initializes a new instance of the <see cref="AutofacBuilder" /> class.
3837
/// </summary>
39-
/// <param name="environment">The environment.</param>
4038
/// <param name="configuration">The configuration.</param>
4139
/// <param name="scanner">The scanner.</param>
4240
/// <param name="assemblyProvider">The assembly provider.</param>
@@ -55,7 +53,6 @@ public class AutofacBuilder : ConventionBuilder<IAutofacBuilder, IAutofacConvent
5553
/// services
5654
/// </exception>
5755
public AutofacBuilder(
58-
IHostEnvironment environment,
5956
IConfiguration configuration,
6057
IConventionScanner scanner,
6158
IAssemblyProvider assemblyProvider,
@@ -67,7 +64,6 @@ public AutofacBuilder(
6764
)
6865
: base(scanner, assemblyProvider, assemblyCandidateFinder, properties)
6966
{
70-
Environment = environment ?? throw new ArgumentNullException(nameof(environment));
7167
_containerBuilder = containerBuilder ?? throw new ArgumentNullException(nameof(containerBuilder));
7268
Configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
7369
Services = services ?? throw new ArgumentNullException(nameof(services));
@@ -138,13 +134,6 @@ public IContainer Build()
138134
/// <value>The services.</value>
139135
public IServiceCollection Services { get; }
140136

141-
/// <summary>
142-
/// The environment that this convention is running
143-
/// Based on IHostEnvironment / IHostingEnvironment
144-
/// </summary>
145-
/// <value>The environment.</value>
146-
public IHostEnvironment Environment { get; }
147-
148137
/// <summary>
149138
/// Gets the on build.
150139
/// </summary>

src/Conventions.Autofac/IAutofacConventionContext.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using JetBrains.Annotations;
44
using Microsoft.Extensions.Configuration;
55
using Microsoft.Extensions.DependencyInjection;
6-
using Microsoft.Extensions.Hosting;
76
using Rocket.Surgery.Conventions.Reflection;
87

98
namespace Rocket.Surgery.Conventions.Autofac
@@ -46,13 +45,6 @@ public interface IAutofacConventionContext : IConventionContext
4645
/// <value>The on container build.</value>
4746
[NotNull] IObservable<IContainer> OnContainerBuild { get; }
4847

49-
/// <summary>
50-
/// The environment that this convention is running
51-
/// Based on IHostEnvironment / IHostingEnvironment
52-
/// </summary>
53-
/// <value>The environment.</value>
54-
[NotNull] IHostEnvironment Environment { get; }
55-
5648
/// <summary>
5749
/// Configures the container.
5850
/// </summary>

src/Hosting.Autofac/AutofacRocketHostExtensions.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public static class AutofacRocketHostExtensions
2121
/// Uses the Autofac.
2222
/// </summary>
2323
/// <param name="builder">The builder.</param>
24-
/// <param name="@delegate">The container.</param>
24+
/// <param name="delegate">The container.</param>
2525
/// <returns>IHostBuilder.</returns>
2626
public static IConventionHostBuilder ConfigureAutofac([NotNull] this IConventionHostBuilder builder, AutofacConventionDelegate @delegate)
2727
{
@@ -53,17 +53,17 @@ public static IConventionHostBuilder UseAutofac(
5353
return builder.ConfigureHosting(
5454
hosting => hosting.Builder.UseServiceProviderFactory(
5555
context =>
56-
new ServicesBuilderServiceProviderFactory(
57-
collection =>
56+
new ServicesBuilderProviderFactory(
57+
hosting.Builder,
58+
(builder, collection) =>
5859
new AutofacBuilder(
59-
context.HostingEnvironment,
6060
context.Configuration,
61-
builder.Get<IConventionScanner>(),
62-
builder.Get<IAssemblyProvider>(),
63-
builder.Get<IAssemblyCandidateFinder>(),
61+
builder.Get<IConventionScanner>()!,
62+
builder.Get<IAssemblyProvider>()!,
63+
builder.Get<IAssemblyCandidateFinder>()!,
6464
collection,
6565
containerBuilder ?? new ContainerBuilder(),
66-
builder.Get<ILogger>(),
66+
builder.Get<ILogger>()!,
6767
builder.ServiceProperties
6868
)
6969
)
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using System;
2+
using Autofac;
3+
using JetBrains.Annotations;
4+
using Microsoft.Extensions.Logging;
5+
using Rocket.Surgery.Conventions;
6+
using Rocket.Surgery.Conventions.Autofac;
7+
using Rocket.Surgery.Conventions.Reflection;
8+
using Rocket.Surgery.Conventions.Scanners;
9+
using Rocket.Surgery.WebAssembly.Hosting;
10+
11+
// ReSharper disable once CheckNamespace
12+
namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting
13+
{
14+
/// <summary>
15+
/// Class AutofacRocketHostExtensions.
16+
/// </summary>
17+
[PublicAPI]
18+
public static class WebAssemblyAutofacRocketHostExtensions
19+
{
20+
/// <summary>
21+
/// Uses the Autofac.
22+
/// </summary>
23+
/// <param name="builder">The builder.</param>
24+
/// <param name="delegate">The container.</param>
25+
/// <returns>IHostBuilder.</returns>
26+
public static IConventionHostBuilder ConfigureAutofac([NotNull] this IConventionHostBuilder builder, AutofacConventionDelegate @delegate)
27+
{
28+
if (builder == null)
29+
{
30+
throw new ArgumentNullException(nameof(builder));
31+
}
32+
33+
builder.AppendDelegate(@delegate);
34+
return builder;
35+
}
36+
37+
/// <summary>
38+
/// Uses the autofac.
39+
/// </summary>
40+
/// <param name="builder">The builder.</param>
41+
/// <param name="containerBuilder">The container builder.</param>
42+
/// <returns>IWebAssemblyHostBuilder.</returns>
43+
public static IConventionHostBuilder UseAutofac([NotNull] this IConventionHostBuilder builder, ContainerBuilder? containerBuilder = null)
44+
{
45+
if (builder == null)
46+
{
47+
throw new ArgumentNullException(nameof(builder));
48+
}
49+
50+
var wasmBuilder = builder.Get<IWebAssemblyHostBuilder>()!;
51+
wasmBuilder.ConfigureContainer(
52+
new WebAssemblyServicesBuilderProviderFactory(
53+
wasmBuilder,
54+
(builder, collection) =>
55+
new AutofacBuilder(
56+
wasmBuilder.Configuration,
57+
builder.Get<IConventionScanner>()!,
58+
builder.Get<IAssemblyProvider>()!,
59+
builder.Get<IAssemblyCandidateFinder>()!,
60+
collection,
61+
containerBuilder ?? new ContainerBuilder(),
62+
builder.Get<ILogger>()!,
63+
builder.ServiceProperties
64+
)
65+
)
66+
);
67+
return builder;
68+
}
69+
}
70+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<TargetFrameworks>netstandard2.1</TargetFrameworks>
4+
<PackageDescription>Provides Autofac support for a Rocket Surgery Application, converts the default service provider into an autofac based one</PackageDescription>
5+
<PackageTags>$(PackageTags);autofac</PackageTags>
6+
</PropertyGroup>
7+
<ItemGroup>
8+
<ProjectReference Include="..\Conventions.Autofac\Rocket.Surgery.Conventions.Autofac.csproj" />
9+
</ItemGroup>
10+
<ItemGroup>
11+
<PackageReference Include="Rocket.Surgery.WebAssembly.Hosting" />
12+
</ItemGroup>
13+
</Project>

test/Autofac.Tests/AutofacBuilderTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ public void Constructs()
4141
servicesBuilder.AssemblyCandidateFinder.Should().NotBeNull();
4242
servicesBuilder.Services.Should().BeSameAs(services);
4343
servicesBuilder.Configuration.Should().NotBeNull();
44-
servicesBuilder.Environment.Should().NotBeNull();
4544

4645
Action a = () => { servicesBuilder.PrependConvention(A.Fake<IAutofacConvention>()); };
4746
a.Should().NotThrow();

0 commit comments

Comments
 (0)