147 lines
7.6 KiB
C#
147 lines
7.6 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.Reflection;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Hosting.Internal;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace Microsoft.AspNetCore.Hosting
|
|
{
|
|
public static class WebHostBuilderExtensions
|
|
{
|
|
/// <summary>
|
|
/// Specify the startup method to be used to configure the web application.
|
|
/// </summary>
|
|
/// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param>
|
|
/// <param name="configureApp">The delegate that configures the <see cref="IApplicationBuilder"/>.</param>
|
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
|
public static IWebHostBuilder Configure(this IWebHostBuilder hostBuilder, Action<IApplicationBuilder> configureApp)
|
|
{
|
|
if (configureApp == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(configureApp));
|
|
}
|
|
|
|
var startupAssemblyName = configureApp.GetMethodInfo().DeclaringType.GetTypeInfo().Assembly.GetName().Name;
|
|
|
|
return hostBuilder
|
|
.UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName)
|
|
.ConfigureServices(services =>
|
|
{
|
|
services.AddSingleton<IStartup>(sp =>
|
|
{
|
|
return new DelegateStartup(sp.GetRequiredService<IServiceProviderFactory<IServiceCollection>>(), configureApp);
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Specify the startup type to be used by the web host.
|
|
/// </summary>
|
|
/// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param>
|
|
/// <param name="startupType">The <see cref="Type"/> to be used.</param>
|
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
|
public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, Type startupType)
|
|
{
|
|
var startupAssemblyName = startupType.GetTypeInfo().Assembly.GetName().Name;
|
|
|
|
return hostBuilder
|
|
.UseSetting(WebHostDefaults.ApplicationKey, startupAssemblyName)
|
|
.ConfigureServices(services =>
|
|
{
|
|
if (typeof(IStartup).GetTypeInfo().IsAssignableFrom(startupType.GetTypeInfo()))
|
|
{
|
|
services.AddSingleton(typeof(IStartup), startupType);
|
|
}
|
|
else
|
|
{
|
|
services.AddSingleton(typeof(IStartup), sp =>
|
|
{
|
|
var hostingEnvironment = sp.GetRequiredService<IHostingEnvironment>();
|
|
return new ConventionBasedStartup(StartupLoader.LoadMethods(sp, startupType, hostingEnvironment.EnvironmentName));
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// Specify the startup type to be used by the web host.
|
|
/// </summary>
|
|
/// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param>
|
|
/// <typeparam name ="TStartup">The type containing the startup methods for the application.</typeparam>
|
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
|
public static IWebHostBuilder UseStartup<TStartup>(this IWebHostBuilder hostBuilder) where TStartup : class
|
|
{
|
|
return hostBuilder.UseStartup(typeof(TStartup));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Configures the default service provider
|
|
/// </summary>
|
|
/// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param>
|
|
/// <param name="configure">A callback used to configure the <see cref="ServiceProviderOptions"/> for the default <see cref="IServiceProvider"/>.</param>
|
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
|
public static IWebHostBuilder UseDefaultServiceProvider(this IWebHostBuilder hostBuilder, Action<ServiceProviderOptions> configure)
|
|
{
|
|
return hostBuilder.UseDefaultServiceProvider((context, options) => configure(options));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Configures the default service provider
|
|
/// </summary>
|
|
/// <param name="hostBuilder">The <see cref="IWebHostBuilder"/> to configure.</param>
|
|
/// <param name="configure">A callback used to configure the <see cref="ServiceProviderOptions"/> for the default <see cref="IServiceProvider"/>.</param>
|
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
|
public static IWebHostBuilder UseDefaultServiceProvider(this IWebHostBuilder hostBuilder, Action<WebHostBuilderContext, ServiceProviderOptions> configure)
|
|
{
|
|
return hostBuilder.ConfigureServices((context, services) =>
|
|
{
|
|
var options = new ServiceProviderOptions();
|
|
configure(context, options);
|
|
services.Replace(ServiceDescriptor.Singleton<IServiceProviderFactory<IServiceCollection>>(new DefaultServiceProviderFactory(options)));
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// Adds a delegate for configuring the provided <see cref="LoggerFactory"/>. This may be called multiple times.
|
|
/// </summary>
|
|
/// <param name="hostBuilder">The <see cref="IWebHostBuilder" /> to configure.</param>
|
|
/// <param name="configureLogging">The delegate that configures the <see cref="LoggerFactory"/>.</param>
|
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
|
public static IWebHostBuilder ConfigureLogging(this IWebHostBuilder hostBuilder, Action<LoggerFactory> configureLogging)
|
|
{
|
|
return hostBuilder.ConfigureLogging<LoggerFactory>((_, loggerFactory) => configureLogging(loggerFactory));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Adds a delegate for configuring the provided <see cref="LoggerFactory"/>. This may be called multiple times.
|
|
/// </summary>
|
|
/// <param name="hostBuilder">The <see cref="IWebHostBuilder" /> to configure.</param>
|
|
/// <param name="configureLogging">The delegate that configures the <see cref="LoggerFactory"/>.</param>
|
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
|
public static IWebHostBuilder ConfigureLogging(this IWebHostBuilder hostBuilder, Action<WebHostBuilderContext, LoggerFactory> configureLogging)
|
|
{
|
|
return hostBuilder.ConfigureLogging(configureLogging);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Adds a delegate for configuring the provided <see cref="ILoggerFactory"/>. This may be called multiple times.
|
|
/// </summary>
|
|
/// <param name="hostBuilder">The <see cref="IWebHostBuilder" /> to configure.</param>
|
|
/// <param name="configureLogging">The delegate that configures the <see cref="ILoggerFactory"/>.</param>
|
|
/// <typeparam name="T">
|
|
/// The type of <see cref="ILoggerFactory"/> to configure.
|
|
/// The delegate will not execute if the type provided does not match the <see cref="ILoggerFactory"/> used by the <see cref="IWebHostBuilder"/>.
|
|
/// </typeparam>
|
|
/// <returns>The <see cref="IWebHostBuilder"/>.</returns>
|
|
public static IWebHostBuilder ConfigureLogging<T>(this IWebHostBuilder hostBuilder, Action<T> configureLogging) where T : ILoggerFactory
|
|
{
|
|
return hostBuilder.ConfigureLogging<T>((_, factory) => configureLogging(factory));
|
|
}
|
|
}
|
|
} |