예제 #1
0
        /// <summary>
        ///     Регистрация уведомления.
        /// </summary>
        /// <typeparam name="TNotification"> Тип уведомления. </typeparam>
        /// <typeparam name="TOptions"> Тип настроек. </typeparam>
        /// <param name="services"> Сервисы. </param>
        /// <param name="optionsBuilder"> Экшн-построитель билдера настроек. </param>
        /// <returns> Сервисы. </returns>
        public static IServiceCollection AddNotification <TNotification, TOptions>(
            this IServiceCollection services,
            Action <NotificationOptionsBuilder <TOptions> > optionsBuilder)
            where TNotification : class, INotification <TOptions>
            where TOptions : class, new()
        {
            var options = new NotificationOptionsBuilder <TOptions>();

            optionsBuilder(options);

            var jobInfo = new NotificationJobInfo <TNotification, TOptions>(options);

            services.AddScoped <TNotification>();
            services.AddSingleton(jobInfo);

            return(services);
        }
예제 #2
0
        /// <summary>
        ///     Запуск уведомлений с получением настроек из билдера.
        /// </summary>
        /// <typeparam name="TNotification"> Тип уведомления. </typeparam>
        /// <typeparam name="TOptions"> Тип настроек. </typeparam>
        /// <param name="sp"> Провайдер IoC. </param>
        /// <param name="optionsBuilder"> Билдер настроек уведомления. </param>
        private static void AddJobFromBuilder <TNotification, TOptions>(
            this IServiceProvider sp,
            NotificationOptionsBuilder <TOptions> optionsBuilder)
            where TNotification : class, INotification <TOptions>
            where TOptions : class, new()
        {
            var templateParser = optionsBuilder?.TemplateBuilderFactory?.Invoke(sp);

            var cron = optionsBuilder?.Cron;

            var additional = new TOptions();

            optionsBuilder?.DynamicOptionsBuilder(sp, additional);

            var notificationOptions = new NotificationOptions <TOptions>
            {
                DynamicOptions = additional,
                Cron           = cron
            };

            RecurringJob.AddOrUpdate <TNotification>(ns => ns.NotifyAsync(templateParser, notificationOptions), cron);
        }
예제 #3
0
 /// <summary>
 ///     Конструктор.
 /// </summary>
 /// <param name="optionsBuilder"> Билдер настроек. </param>
 public NotificationJobInfo(
     NotificationOptionsBuilder <TOptions> optionsBuilder)
 {
     OptionsBuilder = optionsBuilder;
 }