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 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. // 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 // 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. // 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 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(); 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; _factory = factory;
} }
public abstract void Configure(IApplicationBuilder app); public override IServiceProvider CreateServiceProvider(IServiceCollection services)
public virtual void ConfigureServices(IServiceCollection services)
{ {
}
IServiceProvider IStartup.ConfigureServices(IServiceCollection services)
{
ConfigureServices(services);
var builder = _factory.CreateBuilder(services); var builder = _factory.CreateBuilder(services);
ConfigureContainer(builder); ConfigureContainer(builder);
return _factory.CreateServiceProvider(builder); return _factory.CreateServiceProvider(builder);
} }
public virtual void ConfigureContainer(TContainerBuilder containerBuilder) { } public virtual void ConfigureContainer(TBuilder builder)
{
}
} }
} }