Skip to content

Commit f7f4a23

Browse files
github-actions[bot]ericstjsteveharter
authored
[release/9.0-preview7] Don't enable validation when UseDefaultServiceProvider is called (#105356)
* Don't enable validation when UseDefaultServiceProvider is called * Update src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/HostBuilderTests.cs Co-authored-by: Steve Harter <steveharter@users.noreply.github.com> --------- Co-authored-by: Eric StJohn <ericstj@microsoft.com> Co-authored-by: Steve Harter <steveharter@users.noreply.github.com>
1 parent 71c3308 commit f7f4a23

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

src/libraries/Microsoft.Extensions.Hosting/src/HostBuilder.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public partial class HostBuilder : IHostBuilder
3737
private HostingEnvironment? _hostingEnvironment;
3838
private IServiceProvider? _appServices;
3939
private PhysicalFileProvider? _defaultProvider;
40-
private readonly bool _defaultProviderFactoryUsed;
40+
private bool _defaultProviderFactoryUsed;
4141

4242
/// <summary>
4343
/// Initializes a new instance of <see cref="HostBuilder"/>.
@@ -109,6 +109,7 @@ public IHostBuilder UseServiceProviderFactory<TContainerBuilder>(IServiceProvide
109109
ThrowHelper.ThrowIfNull(factory);
110110

111111
_serviceProviderFactory = new ServiceFactoryAdapter<TContainerBuilder>(factory);
112+
_defaultProviderFactoryUsed = false;
112113
return this;
113114
}
114115

@@ -123,6 +124,7 @@ public IHostBuilder UseServiceProviderFactory<TContainerBuilder>(Func<HostBuilde
123124
ThrowHelper.ThrowIfNull(factory);
124125

125126
_serviceProviderFactory = new ServiceFactoryAdapter<TContainerBuilder>(() => _hostBuilderContext!, factory);
127+
_defaultProviderFactoryUsed = false;
126128
return this;
127129
}
128130

src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/HostBuilderTests.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,58 @@ public void ValidateOnBuildEnabledInDevelopment()
560560
Assert.Throws<AggregateException>(() => hostBuilder.Build());
561561
}
562562

563+
[Fact]
564+
public void ScopeValidationNotEnabledInDevelopmentWithServiceProviderChanges()
565+
{
566+
using var host = new HostBuilder()
567+
.UseEnvironment(Environments.Development)
568+
.ConfigureServices(serices =>
569+
{
570+
serices.AddScoped<ServiceA>();
571+
})
572+
.UseDefaultServiceProvider((context, options) =>
573+
{
574+
options.ValidateScopes = false;
575+
})
576+
.Build();
577+
578+
Assert.NotNull(host.Services.GetRequiredService<ServiceA>());
579+
}
580+
[Fact]
581+
public void ScopeValidationtEnabledInDevelopmentWithServiceProviderChanges()
582+
{
583+
var host = new HostBuilder()
584+
.UseEnvironment(Environments.Development)
585+
.ConfigureServices(services =>
586+
{
587+
services.AddScoped<ServiceA>();
588+
})
589+
.UseDefaultServiceProvider((context, options) =>
590+
{
591+
options.ValidateScopes = true;
592+
})
593+
.Build();
594+
595+
Assert.Throws<InvalidOperationException>(() => host.Services.GetRequiredService<ServiceA>());
596+
}
597+
[Fact]
598+
public void ValidateOnBuildNotEnabledInDevelopmentWithServiceProviderChanges()
599+
{
600+
using var host = new HostBuilder()
601+
.UseEnvironment(Environments.Development)
602+
.ConfigureServices(serices =>
603+
{
604+
serices.AddSingleton<ServiceC>();
605+
})
606+
.UseDefaultServiceProvider((context, options) =>
607+
{
608+
options.ValidateOnBuild = false;
609+
})
610+
.Build();
611+
612+
Assert.NotNull(host);
613+
}
614+
563615
[Fact]
564616
public void HostingContextContainsAppConfigurationDuringConfigureLogging()
565617
{

0 commit comments

Comments
 (0)