public void ConfigureServices(IServiceCollection services) { services .AddHttpContextAccessor() .AddHttpClient() .AddSingleton <EmailProcessor>() .AddSingleton(serviceProvider => DispatcherConfig.FromConfiguration(serviceProvider, _configuration.GetSection("Dispatchers"))) .AddCors(b => b.AddDefaultPolicy(opts => opts .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials() // must be at least 2 domains for CORS middleware to send Vary: Origin .WithOrigins("https://example.com", "http://127.0.0.1") .SetIsOriginAllowed(_ => true) )) .AddRouting(); }
public static IHostBuilder CreateHostBuilder(string[] args) { var configuration = CreateConfiguration(); // MQTT client options var mqttConfig = configuration.GetSection("Mqtt:Client").Get <MqttClientConfiguration>() ?? new MqttClientConfiguration(); var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer(mqttConfig.Host ?? throw new InvalidOperationException("No MQTT host supplied."), mqttConfig.Port) .WithCleanSession(mqttConfig.CleanSession ?? true) .WithClientId(mqttConfig.ClientId ?? "ncoreutils-email-client") .Build(); return(new HostBuilder() .UseConsoleLifetime() .UseContentRoot(Environment.CurrentDirectory) .UseEnvironment(Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Development") .ConfigureLogging(b => b .ClearProviders() .AddConfiguration(configuration.GetSection("Logging")) .AddConsole() ) .ConfigureServices((context, services) => { services // HTTP client .AddHttpClient() // JSON serialization .AddOptions <JsonSerializerOptions>().Services .ConfigureOptions <ConfigureJson>() .AddTransient(serviceProvider => serviceProvider.GetRequiredService <IOptionsMonitor <JsonSerializerOptions> >().CurrentValue) // MQTT client .AddSingleton <IMqttClientServiceOptions>(serviceProvider => { var options = ActivatorUtilities.CreateInstance <MqttClientServiceOptions>(serviceProvider); configuration.GetSection("Mqtt").Bind(options); return options; }) .AddSingleton(mqttClientOptions) .AddHostedService <MqttSubscriberService>() .AddSingleton <EmailProcessor>() .AddSingleton(serviceProvider => DispatcherConfig.FromConfiguration(serviceProvider, configuration.GetSection("Dispatchers"))); })); }
public EmailProcessor(ILogger <EmailProcessor> logger, DispatcherConfig config) { Logger = logger ?? throw new System.ArgumentNullException(nameof(logger)); _config = config ?? throw new System.ArgumentNullException(nameof(config)); }