using System; using Microsoft.Extensions.DependencyInjection; using TelegramBotBase.Form; using TelegramBotBase.Interfaces; namespace TelegramBotBase.Factories; public class ServiceProviderStartFormFactory : IStartFormFactory { private readonly IServiceProvider _serviceProvider; private readonly Type _startFormClass; public ServiceProviderStartFormFactory(Type startFormClass, IServiceProvider serviceProvider) { if (!typeof(FormBase).IsAssignableFrom(startFormClass)) { throw new ArgumentException("startFormClass argument must be a FormBase type"); } _startFormClass = startFormClass; _serviceProvider = serviceProvider; } public FormBase CreateForm() { return (FormBase)ActivatorUtilities.CreateInstance(_serviceProvider, _startFormClass); } } public class ServiceProviderStartFormFactory : ServiceProviderStartFormFactory where T : FormBase { public ServiceProviderStartFormFactory(IServiceProvider serviceProvider) : base(typeof(T), serviceProvider) { } }