using Abp.BackgroundJobs; using Abp.Dependency; using Abp.Threading; namespace Abp.Notifications { /// /// This background job distributes notifications to users. /// public class NotificationDistributionJob : BackgroundJob, ITransientDependency { private readonly INotificationConfiguration _notificationConfiguration; private readonly IIocResolver _iocResolver; /// /// Initializes a new instance of the class. /// public NotificationDistributionJob( INotificationConfiguration notificationConfiguration, IIocResolver iocResolver) { _notificationConfiguration = notificationConfiguration; _iocResolver = iocResolver; } public override void Execute(NotificationDistributionJobArgs args) { foreach (var notificationDistributorType in _notificationConfiguration.Distributers) { using (var notificationDistributer = _iocResolver.ResolveAsDisposable(notificationDistributorType)) { AsyncHelper.RunSync(() => notificationDistributer.Object.DistributeAsync(args.NotificationId)); } } } } }