Avoid having to return anything in StartupBase.ConfigureServices (#957)

* Implement IStartup explicitly so we don't have to return a service provider
* Inherit StartupBase and override CreateServiceProvider
This commit is contained in:
Kristian Hellang 2017-06-23 17:48:06 +02:00 committed by David Fowler
parent acb96ec971
commit 513f6ac816
2 changed files with 19 additions and 16 deletions

View File

@ -11,11 +11,10 @@ namespace SampleStartups
{
public class StartupBlockingOnStart : StartupBase
{
public override IServiceProvider ConfigureServices(IServiceCollection services)
public override void ConfigureServices(IServiceCollection services)
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
return base.ConfigureServices(services);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

View File

@ -11,36 +11,40 @@ namespace Microsoft.AspNetCore.Hosting
{
public abstract void Configure(IApplicationBuilder app);
public virtual IServiceProvider ConfigureServices(IServiceCollection services)
IServiceProvider IStartup.ConfigureServices(IServiceCollection services)
{
ConfigureServices(services);
return CreateServiceProvider(services);
}
public virtual void ConfigureServices(IServiceCollection services)
{
}
public virtual IServiceProvider CreateServiceProvider(IServiceCollection services)
{
return services.BuildServiceProvider();
}
}
public abstract class StartupBase<TContainerBuilder> : IStartup
public abstract class StartupBase<TBuilder> : StartupBase
{
private readonly IServiceProviderFactory<TContainerBuilder> _factory;
private readonly IServiceProviderFactory<TBuilder> _factory;
public StartupBase(IServiceProviderFactory<TContainerBuilder> factory)
public StartupBase(IServiceProviderFactory<TBuilder> factory)
{
_factory = factory;
}
public abstract void Configure(IApplicationBuilder app);
public virtual void ConfigureServices(IServiceCollection services)
public override IServiceProvider CreateServiceProvider(IServiceCollection services)
{
}
IServiceProvider IStartup.ConfigureServices(IServiceCollection services)
{
ConfigureServices(services);
var builder = _factory.CreateBuilder(services);
ConfigureContainer(builder);
return _factory.CreateServiceProvider(builder);
}
public virtual void ConfigureContainer(TContainerBuilder containerBuilder) { }
public virtual void ConfigureContainer(TBuilder builder)
{
}
}
}