Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        public virtual void Run()
        {
            var options = TelegramBotConfig.GetOptions(AppConfig.OptionsName);

            if (options == null)
            {
                throw new Exception($"Telegram bot options not configured! Options name: {AppConfig.OptionsName}");
            }

            _container        = options.Container;
            _servicesProvider = options.ServicesProvider;

            options.ServicesRegistrator?.Register(_container, options);
            _container.Initialize();

            var commandFactory = _servicesProvider.GetService <ITelegramBotCommandFactory>();

            commandFactory.Initialize();
            AppConfig.Configure(this);

            var clientManager = _servicesProvider.GetService <ITelegramBotClientManager>();

            clientManager.Token = AppConfig.Token;
            clientManager.Initialize();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="servicesContainer"></param>
        /// <param name="options"></param>
        public void Register(ITelegramBotServicesContainer servicesContainer, TelegramBotOptions options)
        {
            servicesContainer.AddSingleton(() => options.ServicesProvider);
            servicesContainer.AddSingleton <ITelegramBotClientManager, TelegramBotClientManager>();
            servicesContainer.AddSingleton <ITelegramBotMessageHandlerManager, TelegramBotMessageHandlerManager>();
            servicesContainer.AddSingleton <ITelegramBotMessageHandler, TelegramBotMessageHandler>();
            servicesContainer.AddSingleton <ITelegramBotCommandFactory, TelegramBotCommandFactory>();
            servicesContainer.AddSingleton <ITelegramBotCommandFactoryInitializer, TelegramBotCommandFactoryInitializer>();

            servicesContainer.AddSingleton <ITelegramBotCallbackQueryHandler, TelegramBotCallbackQueryHandler>();
            servicesContainer.AddSingleton <ITelegramBotMessageEditedHandler, TelegramBotMessageEditedHandler>();
            servicesContainer.AddSingleton <ITelegramBotInlineQueryHandler, TelegramBotInlineQueryHandler>();
            servicesContainer.AddSingleton <ICommandMessageExceptionHandler, CommandMessageExceptionHandler>();

            servicesContainer.AddTransient <ITelegramBotCommandName, TelegramBotCommandName>();
            servicesContainer.AddTransient <ITelegramBotCommandRole, TelegramBotCommandRole>();
            servicesContainer.AddTransient <InlineKeyboardButtonBuilder, InlineKeyboardButtonBuilder>();
            servicesContainer.AddTransient <KeyboardButtonBuilder, KeyboardButtonBuilder>();

            servicesContainer.AddScoped <ITelegramBotUserService, TelegramBotUserService>();
            servicesContainer.AddScoped <ITelegramBotMessageService, TelegramBotMessageService>();
            servicesContainer.AddScoped <ITelegramBotCallbackQueryService, TelegramBotCallbackQueryService>();
            servicesContainer.AddScoped <ITelegramBotCommandActivator, TelegramBotCommandActivator>();
            servicesContainer.AddScoped <ITelegramBotUnknownMessageService, TelegramBotUnknownMessageService>();

            TelegramBotAutoDIManager.Register(servicesContainer);
        }
Exemple #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="servicesContainer"></param>
        private static void RegisterSingletonService(Type type, ITelegramBotServicesContainer servicesContainer)
        {
            var interfaces = type.GetInterfaces().ToList();
            var baseType   = type.BaseType;

            interfaces.ForEach(f => servicesContainer.AddSingleton(f, type));

            if (baseType != typeof(object))
            {
                servicesContainer.AddSingleton(baseType, type);
            }

            servicesContainer.AddSingleton(type, type);
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="servicesContainer"></param>
        public static void Register(ITelegramBotServicesContainer servicesContainer)
        {
            var assemblies = AppDomain.CurrentDomain.GetAssemblies();

            var types = assemblies
                        .SelectMany(s => s.GetTypes())
                        .Where(w =>
                               w.IsClass &&
                               !w.IsAbstract &&
                               !w.IsSealed &&
                               w.GetCustomAttribute <BotServiceAttribute>() != null)
                        .ToList();

            types.ForEach(f => RegisterService(f, servicesContainer));
        }
Exemple #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="servicesContainer"></param>
        private static void RegisterService(Type type, ITelegramBotServicesContainer servicesContainer)
        {
            var attr = type.GetCustomAttribute <BotServiceAttribute>();

            if (attr.LifeCycle == BotServiceLifeCycle.Scoped)
            {
                RegisterScopedService(type, servicesContainer);
                return;
            }

            if (attr.LifeCycle == BotServiceLifeCycle.Singleton)
            {
                RegisterSingletonService(type, servicesContainer);
                return;
            }

            if (attr.LifeCycle == BotServiceLifeCycle.Transient)
            {
                RegisterTransientService(type, servicesContainer);
                return;
            }
        }