di and serialization support
build nuget workflow for TelegramBotBase project / Build-TelegramBotBase (x64, linux) (push) Successful in 37s

This commit is contained in:
Максим Човнюк
2024-12-06 16:13:46 +05:00
parent 0931147f5a
commit 6a80ec66ad
3 changed files with 16 additions and 5 deletions
@@ -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)
{
+11 -2
View File
@@ -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)))
{