Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
                            };
                        });
                    }
                }
            });
        }