using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Web.Common.Hosting;
// ReSharper disable once CheckNamespace
namespace Microsoft.Extensions.Hosting;
///
/// Umbraco specific extensions for the interface.
///
public static class HostBuilderExtensions
{
///
/// Configures an existing with defaults for an Umbraco application.
///
public static IHostBuilder ConfigureUmbracoDefaults(this IHostBuilder builder)
=> builder.ConfigureUmbracoDefaults(true);
internal static IHostBuilder ConfigureUmbracoDefaults(this IHostBuilder builder, bool addRuntimeHostedService)
{
#if DEBUG
builder.ConfigureAppConfiguration(config
=> config.AddJsonFile(
"appsettings.Local.json",
true,
true));
#endif
builder.ConfigureLogging(x => x.ClearProviders());
if (addRuntimeHostedService)
{
// Add the Umbraco IRuntime as hosted service
builder.ConfigureServices(services => services.AddHostedService(factory => factory.GetRequiredService()));
}
return new UmbracoHostBuilderDecorator(builder, OnHostBuilt);
}
// Runs before any IHostedService starts (including generic web host)
private static void OnHostBuilt(IHost host) =>
StaticServiceProvider.Instance = host.Services;
}