TelegramBotFramework/TelegramBotBase/Factories/ServiceProviderStartFormFactory.cs
Florian Zevedei 30222d640d Adding full DI navigation example for testing purposes.
- adding internal private field into FormBase class
- adding Extension methods into DependencyInjection namespace for use
- adding 2 NavigateTo extension methods for DI using ServiceProvider
- adding example project
- adding to readme as example
2023-09-29 18:34:10 +02:00

42 lines
1.3 KiB
C#

using System;
using Microsoft.Extensions.DependencyInjection;
using TelegramBotBase.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($"{nameof(startFormClass)} argument must be a {nameof(FormBase)} type");
}
_startFormClass = startFormClass;
_serviceProvider = serviceProvider;
}
public FormBase CreateForm()
{
var fb = (FormBase)ActivatorUtilities.CreateInstance(_serviceProvider, _startFormClass);
//Sets an internal field for future ServiceProvider navigation
fb.SetServiceProvider(_serviceProvider);
return fb;
}
}
public class ServiceProviderStartFormFactory<T> : ServiceProviderStartFormFactory
where T : FormBase
{
public ServiceProviderStartFormFactory(IServiceProvider serviceProvider) : base(typeof(T), serviceProvider)
{
}
}