using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Telegrator.Core; using Telegrator.Providers; #pragma warning disable IDE0001 namespace Telegrator.Hosting { /// /// Represents a hosted telegram bots and services builder that helps manage configuration, logging, lifetime, and more. /// public class TelegramBotHostBuilder : ICollectingProvider { private readonly HostApplicationBuilder _innerBuilder; private readonly HostApplicationBuilderSettings _settings; internal IHandlersCollection _handlers = null!; /// public IHandlersCollection Handlers => _handlers; /// public IServiceCollection Services => _innerBuilder.Services; /// public IConfigurationManager Configuration => _innerBuilder.Configuration; /// public ILoggingBuilder Logging => _innerBuilder.Logging; /// public IHostEnvironment Environment => _innerBuilder.Environment; /// /// Initializes a new instance of the class. /// /// /// public TelegramBotHostBuilder(HostApplicationBuilder hostApplicationBuilder, HostApplicationBuilderSettings? settings = null) { _innerBuilder = hostApplicationBuilder ?? throw new ArgumentNullException(nameof(hostApplicationBuilder)); _settings = settings ?? new HostApplicationBuilderSettings(); _innerBuilder.AddTelegrator(); _innerBuilder.Logging.ClearProviders(); } /// /// Initializes a new instance of the class. /// /// /// /// public TelegramBotHostBuilder(HostApplicationBuilder hostApplicationBuilder, IHandlersCollection handlers, HostApplicationBuilderSettings? settings = null) { _innerBuilder = hostApplicationBuilder ?? throw new ArgumentNullException(nameof(hostApplicationBuilder)); _settings = settings ?? new HostApplicationBuilderSettings(); _innerBuilder.AddTelegrator(null, handlers); _innerBuilder.Logging.ClearProviders(); } /// /// Builds the host. /// /// public TelegramBotHost Build() { TelegramBotHost host = new TelegramBotHost(_innerBuilder); host.UseTelegrator(); return host; } } }