public void Configure(WebJobsBuilderContext context, IWebJobsConfigurationBuilder builder) { builder.ConfigurationBuilder.AddInMemoryCollection(new Dictionary <string, string> { { "languageWorkers:dotnet-isolated:workerDirectory", context.ApplicationRootPath } }); }
public void Configure(WebJobsBuilderContext context, IWebJobsBuilder builder) { string appRootPath = context.ApplicationRootPath; builder.Services.AddOptions <FunctionMetadataJsonReaderOptions>().Configure(o => o.FunctionMetadataFileDrectory = appRootPath); builder.Services.AddSingleton <FunctionMetadataJsonReader>(); builder.Services.AddSingleton <IFunctionProvider, JsonFunctionProvider>(); }
private static void ValidateContext(WebJobsBuilderContext context) { if (context?.ApplicationRootPath == null || context?.Configuration == null || context?.EnvironmentName == null) { throw new InvalidOperationException($"The {nameof(WebJobsBuilderContext)} is not in the correct state."); } }
public void Configure(WebJobsBuilderContext context, IWebJobsConfigurationBuilder builder) { string appRootPath = context.ApplicationRootPath; // We need to adjust the path to the worker exe based on the root, if WorkerRootToken is found. WorkerConfigDescription newWorkerDescription = GetUpdatedWorkerDescription(appRootPath); builder.ConfigurationBuilder.AddInMemoryCollection(new Dictionary <string, string> { { _dotnetIsolatedWorkerConfigPath, appRootPath },
public void Configure(WebJobsBuilderContext context, IWebJobsConfigurationBuilder builder) { ValidateContext(context); builder.ConfigurationBuilder.AddInMemoryCollection(new Dictionary <string, string> { { "MyOptions:MyKey", "MyValue" }, { "SomeOtherKey", "SomeOtherValue" }, { "Cron", "0 0 0 1 1 0" } }); }
public void Configure(WebJobsBuilderContext context, IWebJobsBuilder builder) { ValidateContext(context); builder.Services.AddSingleton <IMyService, MyService>(); builder.Services.AddOptions <MyOptions>() .Configure <IConfiguration>((options, config) => { config.GetSection("MyOptions").Bind(options); }); }
public void Configure(WebJobsBuilderContext context, IWebJobsConfigurationBuilder builder) { var functionsConfigBuilder = new FunctionsConfigurationBuilder(builder.ConfigurationBuilder, context); ConfigureAppConfiguration(functionsConfigBuilder); }
public void Configure(WebJobsBuilderContext context, IWebJobsBuilder builder) { var functionsBuilder = new FunctionsHostBuilder(builder.Services, context); Configure(functionsBuilder); }
public FunctionsConfigurationBuilder(IConfigurationBuilder configurationBuilder, WebJobsBuilderContext webJobsBuilderContext) { ConfigurationBuilder = configurationBuilder ?? throw new ArgumentNullException(nameof(configurationBuilder)); Context = new DefaultFunctionsHostBuilderContext(webJobsBuilderContext); }
public static IHostBuilder AddScriptHostCore(this IHostBuilder builder, ScriptApplicationHostOptions applicationHostOptions, Action <IWebJobsBuilder> configureWebJobs = null, ILoggerFactory loggerFactory = null) { var skipHostInitialization = builder.Properties.ContainsKey(ScriptConstants.SkipHostInitializationKey); builder.ConfigureServices((context, services) => { services.AddSingleton <ExternalConfigurationStartupValidator>(); services.AddSingleton <IHostedService>(s => { if (!skipHostInitialization) { var environment = s.GetService <IEnvironment>(); // This key will not be here if we don't have any external configuration startups registered if (context.Properties.TryGetValue(ConfigurationSnapshotKey, out object originalConfigObject) && originalConfigObject is IConfigurationRoot originalConfig) { context.Properties.Remove(ConfigurationSnapshotKey); // Validate the config for anything that needs the Scale Controller. // Including Core Tools as a warning during development time. if (environment.IsWindowsConsumption() || environment.IsLinuxConsumption() || (environment.IsWindowsElasticPremium() && !environment.IsRuntimeScaleMonitoringEnabled()) || environment.IsCoreTools()) { var validator = s.GetService <ExternalConfigurationStartupValidator>(); var logger = s.GetService <ILoggerFactory>().CreateLogger <ExternalConfigurationStartupValidator>(); return(new ExternalConfigurationStartupValidatorService(validator, originalConfig, environment, logger)); } } } return(NullHostedService.Instance); }); // Wire this up early so that any early worker logs are guaranteed to be flushed if any other // IHostedService has a slow startup. services.AddSingleton <IHostedService, WorkerConsoleLogService>(); }); builder.ConfigureWebJobs((context, webJobsBuilder) => { // Built in binding registrations webJobsBuilder.AddExecutionContextBinding(o => { o.AppDirectory = applicationHostOptions.ScriptPath; }) .AddHttp() .AddTimersWithStorage() .AddManualTrigger() .AddWarmup(); var bundleManager = context.Properties.GetAndRemove <IExtensionBundleManager>(BundleManagerKey); webJobsBuilder.Services.AddSingleton <IExtensionBundleManager>(_ => bundleManager); if (!skipHostInitialization) { var webJobsBuilderContext = new WebJobsBuilderContext { Configuration = context.Configuration, EnvironmentName = context.HostingEnvironment.EnvironmentName, ApplicationRootPath = applicationHostOptions.ScriptPath }; // Only set our external startup if we're not suppressing host initialization // as we don't want to load user assemblies otherwise. var locator = context.Properties.GetAndRemove <ScriptStartupTypeLocator>(StartupTypeLocatorKey); webJobsBuilder.UseExternalStartup(locator, webJobsBuilderContext, loggerFactory); } configureWebJobs?.Invoke(webJobsBuilder); }, o => o.AllowPartialHostStartup = true, (context, webJobsConfigBuilder) => { if (!skipHostInitialization) { var webJobsBuilderContext = new WebJobsBuilderContext { Configuration = context.Configuration, EnvironmentName = context.HostingEnvironment.EnvironmentName, ApplicationRootPath = applicationHostOptions.ScriptPath }; // Delay this call so we can call the customer's setup last. context.Properties[DelayedConfigurationActionKey] = new Action <IWebJobsStartupTypeLocator>(locator => webJobsConfigBuilder.UseExternalConfigurationStartup(locator, webJobsBuilderContext, loggerFactory)); } }); // Script host services - these services are scoped to a host instance, and when a new host // is created, these services are recreated builder.ConfigureServices(services => { // Core WebJobs/Script Host services services.AddSingleton <ScriptHost>(); // HTTP Worker services.AddSingleton <IHttpWorkerProcessFactory, HttpWorkerProcessFactory>(); services.AddSingleton <IHttpWorkerChannelFactory, HttpWorkerChannelFactory>(); services.AddSingleton <IHttpWorkerService, DefaultHttpWorkerService>(); // Rpc Worker services.AddSingleton <IJobHostRpcWorkerChannelManager, JobHostRpcWorkerChannelManager>(); services.AddSingleton <IRpcFunctionInvocationDispatcherLoadBalancer, RpcFunctionInvocationDispatcherLoadBalancer>(); //Worker Function Invocation dispatcher services.AddSingleton <IFunctionInvocationDispatcherFactory, FunctionInvocationDispatcherFactory>(); services.AddSingleton <IScriptJobHost>(p => p.GetRequiredService <ScriptHost>()); services.AddSingleton <IJobHost>(p => p.GetRequiredService <ScriptHost>()); services.AddSingleton <IHostedService, WorkerConcurrencyManager>(); services.AddSingleton <ITypeLocator, ScriptTypeLocator>(); services.AddSingleton <ScriptSettingsManager>(); services.AddTransient <IExtensionsManager, ExtensionsManager>(); services.TryAddSingleton <IHttpRoutesManager, DefaultHttpRouteManager>(); services.TryAddSingleton <IMetricsLogger, MetricsLogger>(); services.AddTransient <IExtensionBundleContentProvider, ExtensionBundleContentProvider>(); // Script binding providers services.TryAddEnumerable(ServiceDescriptor.Singleton <IScriptBindingProvider, WebJobsCoreScriptBindingProvider>()); services.TryAddEnumerable(ServiceDescriptor.Singleton <IScriptBindingProvider, CoreExtensionsScriptBindingProvider>()); services.TryAddEnumerable(ServiceDescriptor.Singleton <IScriptBindingProvider, GeneralScriptBindingProvider>()); // Configuration services.AddSingleton <IOptions <ScriptApplicationHostOptions> >(new OptionsWrapper <ScriptApplicationHostOptions>(applicationHostOptions)); services.AddSingleton <IOptionsMonitor <ScriptApplicationHostOptions> >(new ScriptApplicationHostOptionsMonitor(applicationHostOptions)); services.ConfigureOptions <ScriptJobHostOptionsSetup>(); services.ConfigureOptions <JobHostFunctionTimeoutOptionsSetup>(); // LanguageWorkerOptionsSetup should be registered in WebHostServiceCollection as well to enable starting worker processing in placeholder mode. services.ConfigureOptions <LanguageWorkerOptionsSetup>(); services.AddOptions <WorkerConcurrencyOptions>(); services.ConfigureOptions <HttpWorkerOptionsSetup>(); services.ConfigureOptions <ManagedDependencyOptionsSetup>(); services.AddOptions <FunctionResultAggregatorOptions>() .Configure <IConfiguration>((o, c) => { c.GetSection(ConfigurationSectionNames.JobHost) .GetSection(ConfigurationSectionNames.Aggregator) .Bind(o); }); services.AddOptions <ScaleOptions>() .Configure <IConfiguration>((o, c) => { c.GetSection(ConfigurationSectionNames.JobHost) .GetSection(ConfigurationSectionNames.Scale) .Bind(o); }); services.AddSingleton <IFunctionsHostingConfiguration, FunctionsHostingConfiguration>(); services.AddSingleton <IFileLoggingStatusManager, FileLoggingStatusManager>(); if (!applicationHostOptions.HasParentScope) { AddCommonServices(services); } if (SystemEnvironment.Instance.IsKubernetesManagedHosting()) { services.AddSingleton <IDistributedLockManager, KubernetesDistributedLockManager>(); } services.TryAddEnumerable(ServiceDescriptor.Singleton <IHostedService, FunctionInvocationDispatcherShutdownManager>()); if (SystemEnvironment.Instance.IsRuntimeScaleMonitoringEnabled()) { services.TryAddEnumerable(ServiceDescriptor.Singleton <IHostedService, FunctionsScaleMonitorService>()); } services.TryAddSingleton <FunctionsScaleManager>(); services.AddSingleton <IHostOptionsProvider, HostOptionsProvider>(); }); RegisterFileProvisioningService(builder); return(builder); }
void IWebJobsStartup2.Configure(WebJobsBuilderContext context, IWebJobsBuilder builder) { Configure(builder); }
public FunctionsHostBuilderContext(WebJobsBuilderContext webJobsBuilderContext) { _webJobsBuilderContext = webJobsBuilderContext ?? throw new ArgumentNullException(nameof(webJobsBuilderContext)); }
public DefaultFunctionsHostBuilderContext(WebJobsBuilderContext webJobsBuilderContext) : base(webJobsBuilderContext) { }
public FunctionsHostBuilder(IServiceCollection services, WebJobsBuilderContext webJobsBuilderContext) { Services = services ?? throw new ArgumentNullException(nameof(services)); Context = new DefaultFunctionsHostBuilderContext(webJobsBuilderContext); }