@@ -143,6 +143,7 @@ internal virtual WebApplicationFactory<TEntryPoint> WithWebHostBuilderCore(Actio
143143 var factory = new DelegatedWebApplicationFactory (
144144 ClientOptions ,
145145 CreateServer ,
146+ CreateServer ,
146147 CreateHost ,
147148 CreateWebHostBuilder ,
148149 CreateHostBuilder ,
@@ -337,7 +338,10 @@ private void ConfigureHostBuilder(IHostBuilder hostBuilder)
337338 }
338339 else
339340 {
340- webHostBuilder . UseTestServer ( ) ;
341+ webHostBuilder . ConfigureServices ( services =>
342+ {
343+ services . AddSingleton < IServer > ( CreateServer ) ;
344+ } ) ;
341345 }
342346 } ) ;
343347 _host = CreateHost ( hostBuilder ) ;
@@ -565,10 +569,19 @@ private static void EnsureDepsFile()
565569 /// <returns>The <see cref="TestServer"/> with the bootstrapped application.</returns>
566570 protected virtual TestServer CreateServer ( IWebHostBuilder builder ) => new ( builder ) ;
567571
572+ /// <summary>
573+ /// Creates the <see cref="TestServer"/> with the <see cref="IServiceProvider"/> from the bootstrapped application.
574+ /// This is only called for applications using <see cref="IHostBuilder"/>. Applications based on
575+ /// <see cref="IWebHostBuilder"/> will use <see cref="CreateHost"/> instead.
576+ /// </summary>
577+ /// <param name="serviceProvider">The <see cref="IServiceProvider"/> from the bootstrapped application.</param>
578+ /// <returns></returns>
579+ protected virtual TestServer CreateServer ( IServiceProvider serviceProvider ) => new ( serviceProvider ) ;
580+
568581 /// <summary>
569582 /// Creates the <see cref="IHost"/> with the bootstrapped application in <paramref name="builder"/>.
570583 /// This is only called for applications using <see cref="IHostBuilder"/>. Applications based on
571- /// <see cref="IWebHostBuilder"/> will use <see cref="CreateServer"/> instead.
584+ /// <see cref="IWebHostBuilder"/> will use <see cref="CreateServer(IWebHostBuilder) "/> instead.
572585 /// </summary>
573586 /// <param name="builder">The <see cref="IHostBuilder"/> used to create the host.</param>
574587 /// <returns>The <see cref="IHost"/> with the bootstrapped application.</returns>
@@ -801,6 +814,7 @@ public virtual async ValueTask DisposeAsync()
801814 private sealed class DelegatedWebApplicationFactory : WebApplicationFactory < TEntryPoint >
802815 {
803816 private readonly Func < IWebHostBuilder , TestServer > _createServer ;
817+ private readonly Func < IServiceProvider , TestServer > _createServerFromServiceProvider ;
804818 private readonly Func < IHostBuilder , IHost > _createHost ;
805819 private readonly Func < IWebHostBuilder ? > _createWebHostBuilder ;
806820 private readonly Func < IHostBuilder ? > _createHostBuilder ;
@@ -810,6 +824,7 @@ private sealed class DelegatedWebApplicationFactory : WebApplicationFactory<TEnt
810824 public DelegatedWebApplicationFactory (
811825 WebApplicationFactoryClientOptions options ,
812826 Func < IWebHostBuilder , TestServer > createServer ,
827+ Func < IServiceProvider , TestServer > createServerFromServiceProvider ,
813828 Func < IHostBuilder , IHost > createHost ,
814829 Func < IWebHostBuilder ? > createWebHostBuilder ,
815830 Func < IHostBuilder ? > createHostBuilder ,
@@ -819,6 +834,7 @@ public DelegatedWebApplicationFactory(
819834 {
820835 ClientOptions = new WebApplicationFactoryClientOptions ( options ) ;
821836 _createServer = createServer ;
837+ _createServerFromServiceProvider = createServerFromServiceProvider ;
822838 _createHost = createHost ;
823839 _createWebHostBuilder = createWebHostBuilder ;
824840 _createHostBuilder = createHostBuilder ;
@@ -829,6 +845,8 @@ public DelegatedWebApplicationFactory(
829845
830846 protected override TestServer CreateServer ( IWebHostBuilder builder ) => _createServer ( builder ) ;
831847
848+ protected override TestServer CreateServer ( IServiceProvider serviceProvider ) => _createServerFromServiceProvider ( serviceProvider ) ;
849+
832850 protected override IHost CreateHost ( IHostBuilder builder ) => _createHost ( builder ) ;
833851
834852 protected override IWebHostBuilder ? CreateWebHostBuilder ( ) => _createWebHostBuilder ( ) ;
@@ -846,6 +864,7 @@ internal override WebApplicationFactory<TEntryPoint> WithWebHostBuilderCore(Acti
846864 return new DelegatedWebApplicationFactory (
847865 ClientOptions ,
848866 _createServer ,
867+ _createServerFromServiceProvider ,
849868 _createHost ,
850869 _createWebHostBuilder ,
851870 _createHostBuilder ,
0 commit comments