Exemplo n.º 1
0
        public async Task WebApplication_CanResolveServicesAddedAfterBuildFromServiceCollection()
        {
            // This mimics what WebApplicationFactory<T> does and runs configure
            // services callbacks
            using var listener = new HostingListener(hostBuilder =>
            {
                hostBuilder.ConfigureServices(services =>
                {
                    services.AddSingleton <IService, Service>();
                });
            });

            var builder = WebApplication.CreateBuilder();

            // Add the service collection to the service collection
            builder.Services.AddSingleton(builder.Services);

            await using var app = builder.Build();

            var service0 = app.Services.GetRequiredService <IService>();

            var service1 = app.Services.GetRequiredService <IServiceCollection>().BuildServiceProvider().GetRequiredService <IService>();

            Assert.IsType <Service>(service0);
            Assert.IsType <Service>(service1);
        }
Exemplo n.º 2
0
        public void BuildFiresEvents()
        {
            using var _ = RemoteExecutor.Invoke(() =>
            {
                IHostBuilder hostBuilderFromEvent = null;
                IHost hostFromEvent = null;

                var listener = new HostingListener((pair) =>
                {
                    if (pair.Key == "HostBuilding")
                    {
                        hostBuilderFromEvent = (IHostBuilder)pair.Value;
                    }

                    if (pair.Key == "HostBuilt")
                    {
                        hostFromEvent = (IHost)pair.Value;
                    }
                });

                using var sub = DiagnosticListener.AllListeners.Subscribe(listener);

                var hostBuilder = new HostBuilder();
                var host        = hostBuilder.Build();

                Assert.Same(hostBuilder, hostBuilderFromEvent);
                Assert.Same(host, hostFromEvent);
            });
        }
Exemplo n.º 3
0
        public async Task WebApplicationCanObserveConfigurationChangesMadeInBuild()
        {
            // This mimics what WebApplicationFactory<T> does and runs configure
            // services callbacks
            using var listener = new HostingListener(hostBuilder =>
            {
                hostBuilder.ConfigureHostConfiguration(config =>
                {
                    config.AddInMemoryCollection(new Dictionary <string, string>()
                    {
                        { "A", "A" },
                        { "B", "B" },
                    });
                });

                hostBuilder.ConfigureAppConfiguration(config =>
                {
                    config.AddInMemoryCollection(new Dictionary <string, string>()
                    {
                        { "C", "C" },
                        { "D", "D" },
                    });
                });

                hostBuilder.ConfigureWebHost(builder =>
                {
                    builder.UseSetting("E", "E");

                    builder.ConfigureAppConfiguration(config =>
                    {
                        config.AddInMemoryCollection(new Dictionary <string, string>()
                        {
                            { "F", "F" },
                        });
                    });
                });
            });

            var builder = WebApplication.CreateBuilder();

            await using var app = builder.Build();

            Assert.Equal("A", app.Configuration["A"]);
            Assert.Equal("B", app.Configuration["B"]);
            Assert.Equal("C", app.Configuration["C"]);
            Assert.Equal("D", app.Configuration["D"]);
            Assert.Equal("E", app.Configuration["E"]);
            Assert.Equal("F", app.Configuration["F"]);

            Assert.Equal("A", builder.Configuration["A"]);
            Assert.Equal("B", builder.Configuration["B"]);
            Assert.Equal("C", builder.Configuration["C"]);
            Assert.Equal("D", builder.Configuration["D"]);
            Assert.Equal("E", builder.Configuration["E"]);
            Assert.Equal("F", builder.Configuration["F"]);
        }
Exemplo n.º 4
0
        public void MauiAppCanObserveSourcesClearedInInnerBuild()
        {
            using var listener = new HostingListener(hostBuilder =>
            {
                hostBuilder.ConfigureHostConfiguration(config =>
                {
                    // Clearing here would not remove the app config added via builder.Configuration.
                    config.AddInMemoryCollection(new Dictionary <string, string>()
                    {
                        { "A", "A" },
                    });
                });

                hostBuilder.ConfigureAppConfiguration(config =>
                {
                    // This clears both the chained host configuration and chained builder.Configuration.
                    config.Sources.Clear();
                    config.AddInMemoryCollection(new Dictionary <string, string>()
                    {
                        { "B", "B" },
                    });
                });
            });

            var builder = MauiApp.CreateBuilder();

            builder.Configuration.AddInMemoryCollection(new Dictionary <string, string>()
            {
                { "C", "C" },
            });

            using var app = builder.Build();

            Assert.True(string.IsNullOrEmpty(app.Configuration["A"]));
            Assert.True(string.IsNullOrEmpty(app.Configuration["C"]));

            Assert.AreEqual("B", app.Configuration["B"]);

            Assert.AreSame(builder.Configuration, app.Configuration);
        }