/// <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); }
/// <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); }
/// <summary> /// Конструктор. /// </summary> /// <param name="optionsBuilder"> Билдер настроек. </param> public NotificationJobInfo( NotificationOptionsBuilder <TOptions> optionsBuilder) { OptionsBuilder = optionsBuilder; }