From b829f43c5d3f74e660d147b1ae8240af8178ebd6 Mon Sep 17 00:00:00 2001 From: Florian Zevedei Date: Sun, 10 Mar 2024 17:09:13 +0100 Subject: [PATCH] Adding a exception for invalid ServiceProviders #62 - adding an internal exception handler to catch InvalidOperationException and throw a new explicit one --- TelegramBotBase/BotBase.cs | 8 ++++++++ .../InvalidServiceProviderConfiguration.cs | 12 ++++++++++++ .../Factories/ServiceProviderStartFormFactory.cs | 12 +++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 TelegramBotBase/Exceptions/InvalidServiceProviderConfiguration.cs diff --git a/TelegramBotBase/BotBase.cs b/TelegramBotBase/BotBase.cs index a481d6d..8332aa2 100644 --- a/TelegramBotBase/BotBase.cs +++ b/TelegramBotBase/BotBase.cs @@ -8,6 +8,7 @@ using Telegram.Bot.Types; using TelegramBotBase.Args; using TelegramBotBase.Base; using TelegramBotBase.Enums; +using TelegramBotBase.Exceptions; using TelegramBotBase.Interfaces; using TelegramBotBase.Sessions; using Console = TelegramBotBase.Tools.Console; @@ -139,6 +140,13 @@ public sealed class BotBase mr.IsFirstHandler = false; } while (ds.FormSwitched && i < GetSetting(ESettings.NavigationMaximum, 10)); } + catch (InvalidServiceProviderConfiguration ex) + { + var ds = Sessions.GetSession(e.DeviceId); + OnException(new SystemExceptionEventArgs(e.Message.Text, e.DeviceId, ds, ex)); + + throw; + } catch (Exception ex) { var ds = Sessions.GetSession(e.DeviceId); diff --git a/TelegramBotBase/Exceptions/InvalidServiceProviderConfiguration.cs b/TelegramBotBase/Exceptions/InvalidServiceProviderConfiguration.cs new file mode 100644 index 0000000..03135ad --- /dev/null +++ b/TelegramBotBase/Exceptions/InvalidServiceProviderConfiguration.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace TelegramBotBase.Exceptions +{ + public sealed class InvalidServiceProviderConfiguration : Exception + { + public InvalidServiceProviderConfiguration(string message, Exception innerException) : base(message, innerException) { } + + } +} diff --git a/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs b/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs index 8bac651..f143604 100644 --- a/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs +++ b/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs @@ -1,6 +1,7 @@ using System; using Microsoft.Extensions.DependencyInjection; using TelegramBotBase.DependencyInjection; +using TelegramBotBase.Exceptions; using TelegramBotBase.Form; using TelegramBotBase.Interfaces; @@ -24,7 +25,16 @@ public class ServiceProviderStartFormFactory : IStartFormFactory public FormBase CreateForm() { - var fb = (FormBase)ActivatorUtilities.CreateInstance(_serviceProvider, _startFormClass); + FormBase fb = null; + + try + { + fb = (FormBase)ActivatorUtilities.CreateInstance(_serviceProvider, _startFormClass); + } + catch(InvalidOperationException ex) + { + throw new InvalidServiceProviderConfiguration(ex.Message, ex); + } //Sets an internal field for future ServiceProvider navigation fb.SetServiceProvider(_serviceProvider);