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); }
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); }
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); }
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); } }