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

Commit d52dfb7

Browse files
Refactor/remove extra builders (#314)
* lined with convention breaking changes * Moved extensions around * Updated conventions Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 7406443 commit d52dfb7

20 files changed

Lines changed: 287 additions & 856 deletions

Packages.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@
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.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" />
32+
<PackageReference Update="Rocket.Surgery.Conventions" Version="10.0.0-beta.17" />
33+
<PackageReference Update="Rocket.Surgery.Conventions.Abstractions" Version="10.0.0-beta.17" />
34+
<PackageReference Update="Rocket.Surgery.Hosting" Version="10.0.0-beta.17" />
35+
<PackageReference Update="Rocket.Surgery.WebAssembly.Hosting" Version="10.0.0-beta.17" />
3636
</ItemGroup>
3737
<ItemGroup>
3838
<PackageReference Update="Bogus" Version="30.0.4" />

src/Conventions.Autofac/AutofacBuilder.cs

Lines changed: 0 additions & 223 deletions
This file was deleted.
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1-
namespace Rocket.Surgery.Conventions.Autofac
1+
using Autofac;
2+
using Microsoft.Extensions.Configuration;
3+
using Microsoft.Extensions.DependencyInjection;
4+
5+
namespace Rocket.Surgery.Conventions.Autofac
26
{
37
/// <summary>
48
/// Delegate ServiceConventionAction
59
/// </summary>
6-
/// <param name="context">The context.</param>
7-
public delegate void AutofacConventionDelegate(IAutofacConventionContext context);
10+
/// <param name="conventionContext"></param>
11+
/// <param name="configuration"></param>
12+
/// <param name="services"></param>
13+
/// <param name="container"></param>
14+
public delegate void AutofacConvention(IConventionContext conventionContext, IConfiguration configuration, IServiceCollection services, ContainerBuilder container);
815
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using Autofac;
2+
using Autofac.Extensions.DependencyInjection;
3+
using Microsoft.Extensions.Configuration;
4+
using Microsoft.Extensions.DependencyInjection;
5+
using System;
6+
7+
namespace Rocket.Surgery.Conventions.Autofac
8+
{
9+
class AutofacConventionServiceProviderFactory : IServiceProviderFactory<ContainerBuilder>
10+
{
11+
private readonly IConventionContext _conventionContext;
12+
private readonly ContainerBuilder _container;
13+
14+
public AutofacConventionServiceProviderFactory(IConventionContext conventionContext, ContainerBuilder? container = null)
15+
{
16+
_conventionContext = conventionContext;
17+
_container = container ?? new ContainerBuilder();
18+
}
19+
20+
public ContainerBuilder CreateBuilder(IServiceCollection services)
21+
{
22+
var container = _container;
23+
24+
var configuration = _conventionContext.Get<IConfiguration>() ?? throw new ArgumentException("Configuration was not found in context");
25+
foreach (var item in _conventionContext.Conventions.Get<IAutofacConvention, AutofacConvention>())
26+
{
27+
if (item.Convention is IAutofacConvention convention)
28+
{
29+
convention.Register(_conventionContext, configuration, services, _container);
30+
}
31+
else if (item.Delegate is AutofacConvention @delegate)
32+
{
33+
@delegate(_conventionContext, configuration, services, _container);
34+
}
35+
}
36+
37+
container.Populate(services);
38+
39+
return container;
40+
}
41+
42+
public IServiceProvider CreateServiceProvider(ContainerBuilder containerBuilder) => containerBuilder.Build().Resolve<IServiceProvider>();
43+
}
44+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
using System;
2+
using Autofac;
3+
using JetBrains.Annotations;
4+
using Microsoft.Extensions.Configuration;
5+
using Microsoft.Extensions.DependencyInjection;
6+
using Rocket.Surgery.Conventions.Autofac;
7+
8+
// ReSharper disable once CheckNamespace
9+
namespace Rocket.Surgery.Conventions
10+
{
11+
/// <summary>
12+
/// Class AutofacRocketHostExtensions.
13+
/// </summary>
14+
[PublicAPI]
15+
public static class AutofacConventionRocketHostExtensions
16+
{
17+
/// <summary>
18+
/// Uses the Autofac.
19+
/// </summary>
20+
/// <param name="builder">The builder.</param>
21+
/// <param name="delegate">The container.</param>
22+
/// <returns>IHostBuilder.</returns>
23+
public static ConventionContextBuilder ConfigureAutofac([NotNull] this ConventionContextBuilder builder, AutofacConvention @delegate)
24+
{
25+
if (builder == null)
26+
{
27+
throw new ArgumentNullException(nameof(builder));
28+
}
29+
30+
builder.AppendDelegate(@delegate);
31+
return builder;
32+
}
33+
34+
/// <summary>
35+
/// Uses the Autofac.
36+
/// </summary>
37+
/// <param name="builder">The builder.</param>
38+
/// <param name="delegate">The container.</param>
39+
/// <returns>IHostBuilder.</returns>
40+
public static ConventionContextBuilder ConfigureAutofac(
41+
[NotNull] this ConventionContextBuilder builder,
42+
Action<IConfiguration, IServiceCollection, ContainerBuilder> @delegate
43+
)
44+
{
45+
if (builder == null)
46+
{
47+
throw new ArgumentNullException(nameof(builder));
48+
}
49+
50+
builder.AppendDelegate(new AutofacConvention((context, configuration, services, container) => @delegate(configuration, services, container)));
51+
return builder;
52+
}
53+
54+
/// <summary>
55+
/// Uses the Autofac.
56+
/// </summary>
57+
/// <param name="builder">The builder.</param>
58+
/// <param name="delegate">The container.</param>
59+
/// <returns>IHostBuilder.</returns>
60+
public static ConventionContextBuilder ConfigureAutofac([NotNull] this ConventionContextBuilder builder, Action<IServiceCollection, ContainerBuilder> @delegate)
61+
{
62+
if (builder == null)
63+
{
64+
throw new ArgumentNullException(nameof(builder));
65+
}
66+
67+
builder.AppendDelegate(new AutofacConvention((context, configuration, services, container) => @delegate(services, container)));
68+
return builder;
69+
}
70+
71+
/// <summary>
72+
/// Uses the Autofac.
73+
/// </summary>
74+
/// <param name="builder">The builder.</param>
75+
/// <param name="delegate">The container.</param>
76+
/// <returns>IHostBuilder.</returns>
77+
public static ConventionContextBuilder ConfigureAutofac([NotNull] this ConventionContextBuilder builder, Action<ContainerBuilder> @delegate)
78+
{
79+
if (builder == null)
80+
{
81+
throw new ArgumentNullException(nameof(builder));
82+
}
83+
84+
builder.AppendDelegate(new AutofacConvention((context, configuration, services, container) => @delegate(container)));
85+
return builder;
86+
}
87+
}
88+
}

0 commit comments

Comments
 (0)