Skip to content

Commit 380b087

Browse files
committed
Fixes #82 - Allow the ContainerBuilderOptions to be provided when using the AutofacServiceProviderFactory
1 parent 9bf6d85 commit 380b087

3 files changed

Lines changed: 58 additions & 7 deletions

File tree

appveyor.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
image: Ubuntu
22

3-
version: 7.0.2.{build}
3+
version: 7.1.0.{build}
44

55
dotnet_csproj:
6-
version_prefix: '7.0.2'
6+
version_prefix: '7.1.0'
77
patch: true
88
file: 'src\**\*.csproj'
99

src/Autofac.Extensions.DependencyInjection/AutofacServiceProviderFactory.cs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
// OTHER DEALINGS IN THE SOFTWARE.
2525

2626
using System;
27+
using Autofac.Builder;
2728
using Microsoft.Extensions.DependencyInjection;
2829

2930
namespace Autofac.Extensions.DependencyInjection
@@ -34,15 +35,25 @@ namespace Autofac.Extensions.DependencyInjection
3435
public class AutofacServiceProviderFactory : IServiceProviderFactory<ContainerBuilder>
3536
{
3637
private readonly Action<ContainerBuilder> _configurationAction;
38+
private readonly ContainerBuildOptions _containerBuildOptions = ContainerBuildOptions.None;
3739

3840
/// <summary>
3941
/// Initializes a new instance of the <see cref="AutofacServiceProviderFactory"/> class.
4042
/// </summary>
41-
/// <param name="configurationAction">Action on a <see cref="ContainerBuilder"/> that adds component registrations to the conatiner.</param>
42-
public AutofacServiceProviderFactory(Action<ContainerBuilder> configurationAction = null)
43-
{
43+
/// <param name="containerBuildOptions">The container options to use when building the container.</param>
44+
/// <param name="configurationAction">Action on a <see cref="ContainerBuilder"/> that adds component registrations to the container.</param>
45+
public AutofacServiceProviderFactory(
46+
ContainerBuildOptions containerBuildOptions,
47+
Action<ContainerBuilder> configurationAction = null)
48+
: this(configurationAction) =>
49+
_containerBuildOptions = containerBuildOptions;
50+
51+
/// <summary>
52+
/// Initializes a new instance of the <see cref="AutofacServiceProviderFactory"/> class.
53+
/// </summary>
54+
/// <param name="configurationAction">Action on a <see cref="ContainerBuilder"/> that adds component registrations to the container..</param>
55+
public AutofacServiceProviderFactory(Action<ContainerBuilder> configurationAction = null) =>
4456
_configurationAction = configurationAction ?? (builder => { });
45-
}
4657

4758
/// <summary>
4859
/// Creates a container builder from an <see cref="IServiceCollection" />.
@@ -69,7 +80,7 @@ public IServiceProvider CreateServiceProvider(ContainerBuilder containerBuilder)
6980
{
7081
if (containerBuilder == null) throw new ArgumentNullException(nameof(containerBuilder));
7182

72-
var container = containerBuilder.Build();
83+
var container = containerBuilder.Build(_containerBuildOptions);
7384

7485
return new AutofacServiceProvider(container);
7586
}

test/Autofac.Extensions.DependencyInjection.Test/AutofacServiceProviderFactoryTests.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using Autofac.Builder;
23
using Microsoft.Extensions.DependencyInjection;
34
using Xunit;
45

@@ -79,5 +80,44 @@ public void CreateServiceProviderReturnsAutofacServiceProvider()
7980

8081
Assert.IsType<AutofacServiceProvider>(serviceProvider);
8182
}
83+
84+
[Fact]
85+
public void CreateServiceProviderUsesDefaultContainerBuildOptionsWhenNotProvided()
86+
{
87+
var factory = new AutofacServiceProviderFactory();
88+
var services = new ServiceCollection().AddSingleton("Foo");
89+
var builder = factory.CreateBuilder(services);
90+
91+
var serviceProvider = factory.CreateServiceProvider(builder);
92+
93+
Assert.NotNull(serviceProvider.GetService<Lazy<string>>());
94+
}
95+
96+
[Fact]
97+
public void CreateServiceProviderUsesContainerBuildOptionsWhenProvided()
98+
{
99+
var options = ContainerBuildOptions.ExcludeDefaultModules;
100+
var factory = new AutofacServiceProviderFactory(options);
101+
var services = new ServiceCollection().AddSingleton("Foo");
102+
var builder = factory.CreateBuilder(services);
103+
104+
var serviceProvider = factory.CreateServiceProvider(builder);
105+
106+
Assert.Null(serviceProvider.GetService<Lazy<string>>());
107+
}
108+
109+
[Fact]
110+
public void CanProvideContainerBuildOptionsAndConfigurationAction()
111+
{
112+
var factory = new AutofacServiceProviderFactory(
113+
ContainerBuildOptions.ExcludeDefaultModules,
114+
config => config.Register(c => "Foo"));
115+
var builder = factory.CreateBuilder(new ServiceCollection());
116+
117+
var serviceProvider = factory.CreateServiceProvider(builder);
118+
119+
Assert.NotNull(serviceProvider.GetService<string>());
120+
Assert.Null(serviceProvider.GetService<Lazy<string>>());
121+
}
82122
}
83123
}

0 commit comments

Comments
 (0)