JOBot/JOBot.TClient/DependencyInjection.cs
2025-07-12 02:02:03 +03:00

57 lines
2.0 KiB
C#

using Grpc.Core;
using Grpc.Net.Client;
using JOBot.Proto;
using JOBot.TClient.Commands.Buttons;
using JOBot.TClient.Commands.Commands;
using JOBot.TClient.Core.HostedServices;
using JOBot.TClient.Services;
using JOBot.TClient.Statements;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Telegram.Bot;
namespace JOBot.TClient;
public static class DependencyInjection
{
public static IServiceCollection ConfigureServices(this IServiceCollection services, IConfiguration config)
{
services.AddSingleton(config);
services.AddScoped<ChannelBase, GrpcChannel>(_ => GrpcChannel.ForAddress(config.GetValue<string>("BackendHost")
?? throw new MissingFieldException("Host is not defined")));
#region Commands
services.AddScoped<StartCommand>();
services.AddScoped<MenuCommand>();
services.AddScoped<InfoCommand>();
//buttons
services.AddScoped<EulaAgreementButtonCommand>();
#endregion
#region gRPC Clients
services.AddGrpcClient<User.UserClient>(o => o.Address = new Uri("http://backend:5001"));
#endregion
#region Services
services.AddSingleton<UserService>();
services.AddScoped<PrepareUserService>();
services.AddScoped<MenuService>();
#endregion
#region States
services.AddScoped<PrepareUserState>();
#endregion
// Bot service
services.AddHostedService<BotBackgroundService>();
services.AddSingleton<ITelegramBotClient>(_ =>
new TelegramBotClient(config.GetValue<string>("TelegramToken")
?? throw new MissingFieldException("TelegramToken is not set")));
services.AddLogging(builder => builder.AddConsole());
return services;
}
}