public void Scopes_Factories()
        {
            IList <IServiceProvider> serviceProviders = new List <IServiceProvider>();

            var services = new ServiceCollection();

            services.AddTransient <A>(p =>
            {
                serviceProviders.Add(p);
                return(new A());
            });

            var rootScopeFactory = new WebHostServiceProvider(new ServiceCollection());
            var jobHostProvider  = new JobHostServiceProvider(services, rootScopeFactory, rootScopeFactory);

            // Get this service twice.
            // The IServiceProvider passed to the factory should be different because they are separate scopes.
            var scope1 = jobHostProvider.CreateScope();

            scope1.ServiceProvider.GetService <A>();

            var scope2 = jobHostProvider.CreateScope();

            scope2.ServiceProvider.GetService <A>();

            Assert.Equal(2, serviceProviders.Count);
            Assert.NotSame(serviceProviders[0], serviceProviders[1]);
        }
            public IHost BuildHost(bool skipHostStartup, bool skipHostConfigurationParsing)
            {
                if (_count == 0)
                {
                    _count++;
                    var services            = new ServiceCollection();
                    var rootServiceProvider = new WebHostServiceProvider(services);
                    var mockDepValidator    = new Mock <IDependencyValidator>();

                    var host = new HostBuilder()
                               .UseServiceProviderFactory(new JobHostScopedServiceProviderFactory(rootServiceProvider, rootServiceProvider, mockDepValidator.Object))
                               .Build();

                    throw new InvalidOperationException("boom!");
                }
                else if (_count == 1)
                {
                    _count++;
                    _pause();
                }
                else
                {
                    throw new InvalidOperationException("We should never get here.");
                }

                return(null);
            }
Exemple #3
0
        public void Scopes_Factories()
        {
            using (new TestScopedEnvironmentVariable(EnvironmentSettingNames.AzureWebJobsFeatureFlags, ScriptConstants.FeatureFlagEnableEnhancedScopes))
            {
                IList <IServiceProvider> serviceProviders = new List <IServiceProvider>();

                var services = new ServiceCollection();
                services.AddTransient <A>(p =>
                {
                    serviceProviders.Add(p);
                    return(new A());
                });

                var rootScopeFactory = new WebHostServiceProvider(new ServiceCollection());
                var jobHostProvider  = new JobHostServiceProvider(services, rootScopeFactory, rootScopeFactory);

                // Get this service twice.
                // The IServiceProvider passed to the factory should be different because they are separate scopes.
                var scope1 = jobHostProvider.CreateScope();
                scope1.ServiceProvider.GetService <A>();

                var scope2 = jobHostProvider.CreateScope();
                scope2.ServiceProvider.GetService <A>();

                Assert.Equal(2, serviceProviders.Count);
                Assert.NotSame(serviceProviders[0], serviceProviders[1]);
            }
        }
        public static IHostBuilder ConfigureDefaultTestWebScriptHost(this IHostBuilder builder, Action <IWebJobsBuilder> configureWebJobs,
                                                                     Action <ScriptApplicationHostOptions> configure = null, bool runStartupHostedServices = false, Action <IServiceCollection> configureRootServices = null)
        {
            var webHostOptions = new ScriptApplicationHostOptions()
            {
                IsSelfHost = true,
                ScriptPath = TestHelpers.FunctionsTestDirectory,
                LogPath    = TestHelpers.GetHostLogFileDirectory().FullName
            };
            TestMetricsLogger metricsLogger = new TestMetricsLogger();

            configure?.Invoke(webHostOptions);

            // Register root services
            var services = new ServiceCollection();

            AddMockedSingleton <IDebugStateProvider>(services);
            AddMockedSingleton <IScriptHostManager>(services);
            AddMockedSingleton <IEnvironment>(services);
            AddMockedSingleton <IScriptWebHostEnvironment>(services);
            AddMockedSingleton <IEventGenerator>(services);
            AddMockedSingleton <IFunctionInvocationDispatcherFactory>(services);
            AddMockedSingleton <IHttpWorkerService>(services);
            AddMockedSingleton <IApplicationLifetime>(services);
            AddMockedSingleton <IDependencyValidator>(services);
            AddMockedSingleton <IAzureBlobStorageProvider>(services);
            services.AddSingleton <HostNameProvider>();
            services.AddSingleton <IMetricsLogger>(metricsLogger);
            services.AddWebJobsScriptHostRouting();
            services.AddLogging();
            services.AddFunctionMetadataManager(webHostOptions, metricsLogger);
            configureRootServices?.Invoke(services);

            var rootProvider = new WebHostServiceProvider(services);

            builder
            .AddWebScriptHost(rootProvider, rootProvider, webHostOptions, configureWebJobs)
            .ConfigureAppConfiguration(c =>
            {
                c.AddTestSettings();
            })
            .ConfigureServices(s =>
            {
                s.AddScriptGrpc();
            });

            if (!runStartupHostedServices)
            {
                builder.ConfigureServices(s => s.RemoveAll <IHostedService>());
            }

            webHostOptions.RootServiceProvider = rootProvider;
            return(builder);
        }
        public void Scopes_ChildScopeIsIsolated()
        {
            var services = new ServiceCollection();

            services.AddScoped <A>();

            var rootScopeFactory = new WebHostServiceProvider(new ServiceCollection());
            var jobHostProvider  = new JobHostServiceProvider(services, rootScopeFactory, rootScopeFactory);

            var a1 = jobHostProvider.GetService <A>();

            jobHostProvider.CreateScope();
            var a2 = jobHostProvider.GetService <A>();

            Assert.NotNull(a1);
            Assert.NotNull(a2);
            Assert.Same(a1, a2);
        }
Exemple #6
0
        public void Scopes_ChildScopeIsIsolated()
        {
            using (new TestScopedEnvironmentVariable(EnvironmentSettingNames.AzureWebJobsFeatureFlags, ScriptConstants.FeatureFlagEnableEnhancedScopes))
            {
                var services = new ServiceCollection();
                services.AddScoped <A>();

                var rootScopeFactory = new WebHostServiceProvider(new ServiceCollection());
                var jobHostProvider  = new JobHostServiceProvider(services, rootScopeFactory, rootScopeFactory);

                var a1 = jobHostProvider.GetService <A>();
                jobHostProvider.CreateScope();
                var a2 = jobHostProvider.GetService <A>();
                Assert.NotNull(a1);
                Assert.NotNull(a2);
                Assert.Same(a1, a2);
            }
        }
        public static IHostBuilder ConfigureDefaultTestWebScriptHost(this IHostBuilder builder, Action <IWebJobsBuilder> configureWebJobs,
                                                                     Action <ScriptApplicationHostOptions> configure = null, bool runStartupHostedServices = false, Action <IServiceCollection> configureRootServices = null)
        {
            var webHostOptions = new ScriptApplicationHostOptions()
            {
                IsSelfHost = true,
                ScriptPath = TestHelpers.FunctionsTestDirectory,
                LogPath    = TestHelpers.GetHostLogFileDirectory().FullName
            };

            configure?.Invoke(webHostOptions);

            // Register root services
            var services = new ServiceCollection();

            AddMockedSingleton <IDebugStateProvider>(services);
            AddMockedSingleton <IScriptHostManager>(services);
            AddMockedSingleton <IEnvironment>(services);
            AddMockedSingleton <IScriptWebHostEnvironment>(services);
            AddMockedSingleton <IEventGenerator>(services);
            AddMockedSingleton <AspNetCore.Hosting.IApplicationLifetime>(services);
            services.AddWebJobsScriptHostRouting();
            services.AddLogging();

            configureRootServices?.Invoke(services);

            var rootProvider = new WebHostServiceProvider(services);

            builder
            .AddWebScriptHost(rootProvider, rootProvider, webHostOptions, configureWebJobs)
            .ConfigureAppConfiguration(c =>
            {
                c.AddTestSettings();
            });

            if (!runStartupHostedServices)
            {
                builder.ConfigureServices(s => s.RemoveAll <IHostedService>());
            }

            return(builder);
        }
        public void Scopes_DelegateFactory()
        {
            var services = new ServiceCollection();

            services.AddScoped <A>();
            services.AddScoped <ServiceFactory>(provider => (type) => provider.GetRequiredService(type));

            var rootScopeFactory = new WebHostServiceProvider(new ServiceCollection());
            var jobHostProvider  = new JobHostServiceProvider(services, rootScopeFactory, rootScopeFactory);

            var scope1 = jobHostProvider.CreateScope();
            var a1     = scope1.ServiceProvider.GetService <ServiceFactory>()(typeof(A));

            var scope2 = jobHostProvider.CreateScope();
            var a2     = scope2.ServiceProvider.GetService <ServiceFactory>()(typeof(A));

            Assert.NotNull(a1);
            Assert.NotNull(a2);
            Assert.NotSame(a1, a2);
        }
Exemple #9
0
        public void Scopes_DelegateFactory(string flag)
        {
            using (new TestScopedEnvironmentVariable(EnvironmentSettingNames.AzureWebJobsFeatureFlags, flag))
            {
                var services = new ServiceCollection();

                services.AddScoped <A>();
                services.AddScoped <ServiceFactory>(provider => (type) => provider.GetRequiredService(type));

                var rootScopeFactory = new WebHostServiceProvider(new ServiceCollection());
                var jobHostProvider  = new JobHostServiceProvider(services, rootScopeFactory, rootScopeFactory);

                var scope1 = jobHostProvider.CreateScope();
                var a1     = scope1.ServiceProvider.GetService <ServiceFactory>()(typeof(A));

                var scope2 = jobHostProvider.CreateScope();
                var a2     = scope2.ServiceProvider.GetService <ServiceFactory>()(typeof(A));

                Assert.NotNull(a1);
                Assert.NotNull(a2);
                Assert.NotSame(a1, a2);
            }
        }