Ejemplo n.º 1
0
        public async Task ExternalContainerInstanceCanBeUsedForEverything()
        {
            var disposables = new List <DisposableService>();

            var containerFactory = new ExternalContainerFactory(services =>
            {
                services.AddSingleton(sp =>
                {
                    var service = new DisposableService();
                    disposables.Add(service);
                    return(service);
                });
            });

            var host = new WebHostBuilder()
                       .UseStartup <StartupWithExternalServices>()
                       .UseServer(new TestServer())
                       .ConfigureServices(services =>
            {
                services.AddSingleton <IServiceProviderFactory <IServiceCollection> >(containerFactory);
            })
                       .Build();

            using (host)
            {
                await host.StartAsync();
            }

            // We should create the hosting service provider and the application service provider
            Assert.Equal(2, containerFactory.ServiceProviders.Count);
            Assert.Equal(2, disposables.Count);

            Assert.NotEqual(disposables[0], disposables[1]);
            Assert.True(disposables[0].Disposed);
            Assert.True(disposables[1].Disposed);
        }