diff --git a/.gitea/workflows/TelegramBotFramework.nuget.yaml b/.gitea/workflows/TelegramBotFramework.nuget.yaml index 1c0f420..1a3c622 100644 --- a/.gitea/workflows/TelegramBotFramework.nuget.yaml +++ b/.gitea/workflows/TelegramBotFramework.nuget.yaml @@ -8,7 +8,7 @@ jobs: Build-TelegramBotBase: env: APP_PROJECT_NAME: TelegramBotBase - PACKAGE_VERSION: "123.0.0" + PACKAGE_VERSION: "123.0.1" strategy: matrix: os: diff --git a/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs b/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs index f143604..8d825e2 100644 --- a/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs +++ b/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs @@ -23,13 +23,15 @@ public class ServiceProviderStartFormFactory : IStartFormFactory _serviceProvider = serviceProvider; } - public FormBase CreateForm() + public FormBase CreateForm() => CreateForm(null); + + public FormBase CreateForm(Type? specifiedStartFrom = null) { FormBase fb = null; try { - fb = (FormBase)ActivatorUtilities.CreateInstance(_serviceProvider, _startFormClass); + fb = (FormBase)ActivatorUtilities.CreateInstance(_serviceProvider, specifiedStartFrom ?? _startFormClass); } catch(InvalidOperationException ex) { diff --git a/TelegramBotBase/SessionManager.cs b/TelegramBotBase/SessionManager.cs index 7e9d257..f5e04d1 100644 --- a/TelegramBotBase/SessionManager.cs +++ b/TelegramBotBase/SessionManager.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using TelegramBotBase.Args; using TelegramBotBase.Attributes; using TelegramBotBase.Base; +using TelegramBotBase.Factories; using TelegramBotBase.Form; using TelegramBotBase.Interfaces; using TelegramBotBase.Sessions; @@ -145,9 +146,17 @@ public class SessionManager { continue; } - + FormBase form; + if (BotBase.StartFormFactory is ServiceProviderStartFormFactory diFactory) + { + form = diFactory.CreateForm(t); + } //No default constructor, fallback - if (!(t.GetConstructor(new Type[] { })?.Invoke(new object[] { }) is FormBase form)) + else if (t.GetConstructor(new Type[] { })?.Invoke(new object[] { }) is FormBase f) + { + form = f; + } + else { if (!statemachine.FallbackStateForm.IsSubclassOf(typeof(FormBase))) {