di and serialization support
All checks were successful
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

View File

@ -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:

View File

@ -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)
{

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)))
{