using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Diagnostics.Metrics; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Telegrator.Core; #pragma warning disable IDE0001 namespace Telegrator.Hosting.Web { /// /// Represents a web hosted telegram bots and services builder that helps manage configuration, logging, lifetime, and more. /// public class TelegramBotWebHostBuilder : IHostApplicationBuilder, ICollectingProvider { private readonly WebApplicationBuilder _innerBuilder; private readonly WebApplicationOptions _settings; internal IHandlersCollection _handlers = null!; /// public IHandlersCollection Handlers => _handlers; /// public IConfigurationManager Configuration => _innerBuilder.Configuration; /// public ILoggingBuilder Logging => _innerBuilder.Logging; /// public IServiceCollection Services => _innerBuilder.Services; /// public IHostEnvironment Environment => _innerBuilder.Environment; /// public IDictionary Properties => ((IHostApplicationBuilder)_innerBuilder).Properties; /// public IMetricsBuilder Metrics => _innerBuilder.Metrics; /// /// Initializes a new instance of the class. /// /// /// public TelegramBotWebHostBuilder(WebApplicationBuilder webApplicationBuilder, WebApplicationOptions? settings = null) { _innerBuilder = webApplicationBuilder ?? throw new ArgumentNullException(nameof(webApplicationBuilder)); _settings = settings ?? throw new ArgumentNullException(nameof(settings)); this.AddTelegratorWeb(); } /// /// Initializes a new instance of the class. /// /// /// /// public TelegramBotWebHostBuilder(WebApplicationBuilder webApplicationBuilder, TelegratorOptions? options, WebApplicationOptions? settings) { _innerBuilder = webApplicationBuilder ?? throw new ArgumentNullException(nameof(webApplicationBuilder)); _settings = settings ?? throw new ArgumentNullException(nameof(settings)); this.AddTelegratorWeb(options, null); } /// /// Initializes a new instance of the class. /// /// /// /// public TelegramBotWebHostBuilder(WebApplicationBuilder webApplicationBuilder, IHandlersCollection handlers, WebApplicationOptions settings) { _innerBuilder = webApplicationBuilder ?? throw new ArgumentNullException(nameof(webApplicationBuilder)); _settings = settings ?? throw new ArgumentNullException(nameof(settings)); this.AddTelegratorWeb(null, handlers); } /// /// Initializes a new instance of the class. /// /// /// /// /// public TelegramBotWebHostBuilder(WebApplicationBuilder webApplicationBuilder, IHandlersCollection handlers, TelegratorOptions? options, WebApplicationOptions settings) { _innerBuilder = webApplicationBuilder ?? throw new ArgumentNullException(nameof(webApplicationBuilder)); _settings = settings ?? throw new ArgumentNullException(nameof(settings)); this.AddTelegratorWeb(options, handlers); } /// /// Builds the host. /// /// public TelegramBotWebHost Build() { TelegramBotWebHost host = new TelegramBotWebHost(_innerBuilder); host.UseTelegrator(); return host; } /// public void ConfigureContainer(IServiceProviderFactory factory, Action? configure = null) where TContainerBuilder : notnull { ((IHostApplicationBuilder)_innerBuilder).ConfigureContainer(factory, configure); } } }