public override void Configure(IFunctionsHostBuilder builder) { #region null checks if (builder is null) { throw new ArgumentNullException(nameof(builder)); } #endregion var connectionString = Environment.GetEnvironmentVariable("AzureAppConfigurationConnectionString"); if (string.IsNullOrEmpty(connectionString)) { throw new InvalidOperationException("AzureAppConfigurationConnectionString app setting is required"); } var configuration = new ConfigurationBuilder() .AddCatalogueScannerAzureAppConfiguration(connectionString, out var refresherSupplier) .Build(); ICatalogueScannerHostBuilder catalogueScannerHostBuilder = new CatalogueScannerHostBuilder(builder, configuration); catalogueScannerHostBuilder.Services.SetConfigurationRefresher(refresherSupplier); catalogueScannerHostBuilder .AddPlugin <CoreCatalogueScannerPlugin>() .AddPlugin <OrchardCoreLocalisationCatalogueScannerPlugin>() .AddPlugin <SaleFinderCatalogueScannerPlugin>(); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddServerSideBlazor(); services.AddMatBlazor(); services.AddScoped <TokenProvider>(); services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd")) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); services.Configure <CatalogueScannerApiOptions>(Configuration.GetSection(CatalogueScannerApiOptions.CatalogueScannerApi)); services.AddHttpClient(CatalogueScannerApiOptions.CatalogueScannerApi, (serviceProvider, httpClient) => { var options = serviceProvider .GetRequiredService <IOptions <CatalogueScannerApiOptions> >() .Value; if (options.BaseAddress == null) { throw new InvalidOperationException($"{CatalogueScannerApiOptions.CatalogueScannerApi}:{nameof(options.BaseAddress)} app setting must be configured"); } httpClient.BaseAddress = options.BaseAddress; }); services.AddHttpClient <CatalogueScanStateService>(CatalogueScannerApiOptions.CatalogueScannerApi, (httpClient) => { var baseAddress = httpClient.BaseAddress ?? throw new InvalidOperationException($"{nameof(httpClient)}.{nameof(httpClient.BaseAddress)} is null"); httpClient.BaseAddress = httpClient.BaseAddress.AppendPath("CatalogueScanState/"); }); services.AddSingleton <ILocalizationFileLocationProvider, ContentRootPoFileLocationProvider>(); services.AddScoped <TimeZoneService>(); IFunctionsHostBuilder functionsHostBuilder = new DummyFunctionsHostBuilder(services); ICatalogueScannerHostBuilder catalogueScannerHostBuilder = new CatalogueScannerHostBuilder(functionsHostBuilder, Configuration); catalogueScannerHostBuilder .AddPlugin <CoreCatalogueScannerPlugin>() .AddPlugin <OrchardCoreLocalisationCatalogueScannerPlugin>() .AddPlugin <SaleFinderCatalogueScannerPlugin>(); string applicationInsightsConnectionString = Configuration["APPINSIGHTS_CONNECTIONSTRING"]; if (!string.IsNullOrEmpty(applicationInsightsConnectionString)) { services.AddApplicationInsightsTelemetry(applicationInsightsConnectionString); } }