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;
}
}
}