public static IHostBuilder ConfigureGtkHost(this IHostBuilder builder, string applicationId, string[] args, Action <IGtkHostBuilder> configure, Action <GtkHostBuilderOptions> configureGtkHostBuilder) { if (args == null) { throw new ArgumentNullException(nameof(args)); } if (string.IsNullOrEmpty(applicationId)) { Application.Init(); } else { Application.Init(applicationId, ref args); } if (configure is null) { throw new ArgumentNullException(nameof(configure)); } if (configureGtkHostBuilder is null) { throw new ArgumentNullException(nameof(configureGtkHostBuilder)); } var gtkHostBuilderOptions = new GtkHostBuilderOptions(); configureGtkHostBuilder(gtkHostBuilderOptions); var gtkHostBuilder = new GenericGtkHostBuilder(builder, gtkHostBuilderOptions); configure(gtkHostBuilder); builder.ConfigureServices((context, services) => services.AddHostedService <GenericGtkHostService>()); return(builder); }
public GenericGtkHostBuilder(IHostBuilder builder, GtkHostBuilderOptions options) { _builder = builder; var configBuilder = new ConfigurationBuilder() .AddInMemoryCollection(); if (options.SuppressEnvironmentConfiguration) { configBuilder.AddEnvironmentVariables(prefix: "GTKNETCORE_"); } _config = configBuilder.Build(); _builder.ConfigureHostConfiguration(config => { config.AddConfiguration(_config); ExecuteHostingStartups(); }); _builder.ConfigureAppConfiguration((context, configurationBuilder) => { if (_hostingStartupGtkHostBuilder is not null) { var gtkHostContext = GetGtkHostBuilderContext(context); _hostingStartupGtkHostBuilder.ConfigureAppConfiguration(gtkHostContext, configurationBuilder); } }); _builder.ConfigureServices((context, services) => { var gtkHostContext = GetGtkHostBuilderContext(context); var gtkHostOptions = (GtkHostOptions)context.Properties[typeof(GtkHostOptions)]; services.AddSingleton(gtkHostContext.HostingEnvironment); services.Configure <GenericGtkHostServiceOptions>(options => { options.GtkHostOptions = gtkHostOptions; options.HostingStartupExceptions = _hostingStartupErrors; }); services.TryAddSingleton <IApplicationBuilderFactory, ApplicationBuilderFactory>(); _hostingStartupGtkHostBuilder?.ConfigureServices(gtkHostContext, services); if (!string.IsNullOrEmpty(gtkHostOptions.StartupAssembly)) { try { var startupType = StartupLoader.FindStartupType(gtkHostOptions.StartupAssembly, gtkHostContext.HostingEnvironment.EnvironmentName); UseStartup(startupType, context, services); } catch (Exception ex) when(gtkHostOptions.CaptureStartupErrors) { var capture = ExceptionDispatchInfo.Capture(ex); services.Configure <GenericGtkHostServiceOptions>(options => { options.ConfigureApplication = app => { // Throw if there was any errors initializing startup capture.Throw(); }; }); } } }); }