Nedo.AspNet.Notifications.Abstractions 1.0.0

dotnet add package Nedo.AspNet.Notifications.Abstractions --version 1.0.0
                    
NuGet\Install-Package Nedo.AspNet.Notifications.Abstractions -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Nedo.AspNet.Notifications.Abstractions" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Nedo.AspNet.Notifications.Abstractions" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Nedo.AspNet.Notifications.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Nedo.AspNet.Notifications.Abstractions --version 1.0.0
                    
#r "nuget: Nedo.AspNet.Notifications.Abstractions, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Nedo.AspNet.Notifications.Abstractions@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Nedo.AspNet.Notifications.Abstractions&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Nedo.AspNet.Notifications.Abstractions&version=1.0.0
                    
Install as a Cake Tool

Nedo.AspNet.Notifications

Store-and-forward notifications for ASP.NET Core: a message is persisted first, fanned out into one delivery row per device, and sent by a background dispatcher that retries with backoff. Nothing is sent inside the request that raised it, so a slow or unreachable transport cannot fail a user's action, and a restart resumes instead of losing the queue.

Package Take it when
Nedo.AspNet.Notifications.Abstractions your code RAISES notifications — contracts and models only, no transport, no database
Nedo.AspNet.Notifications you host the queue: entities, dispatcher, retry policy, device-token store, templates
Nedo.AspNet.Notifications.Firebase you deliver over Firebase Cloud Messaging

Install

dotnet add package Nedo.AspNet.Notifications
dotnet add package Nedo.AspNet.Notifications.Firebase   # transport

Wiring

The library never names your DbContext. Implement INotificationStore on the context that owns the three tables and register it:

public class AppDbContext : DbContext, INotificationStore
{
    public DbSet<NotificationMessage> NotificationMessages => Set<NotificationMessage>();
    public DbSet<NotificationDelivery> NotificationDeliveries => Set<NotificationDelivery>();
    public DbSet<UserDeviceToken> UserDeviceTokens => Set<UserDeviceToken>();
}

builder.Services.AddNedoNotifications<AppDbContext>(builder.Configuration);
builder.Services.AddFirebaseNotifications();

AddNedoNotifications reads its own Notifications configuration section — templates, whether the dispatcher runs in this process, batch size and backoff. Migrations are yours: the entities map through your context, so your application generates the DDL that matches your own naming.

Raising one

await dispatcher.QueueAsync(new NotificationRequest
{
    Type   = "invoice.issued",          // stable machine key; your own vocabulary
    UserId = user.Id,
    Title  = "Invoice issued",
    Body   = "Invoice #1042 is ready.",
    Data   = new Dictionary<string, string> { ["invoiceId"] = "1042" },
});

The dispatcher claims rows it is about to send, so several instances can run the queue without two of them sending the same delivery. A token the transport reports as dead is retired rather than retried; a transient failure backs off and is tried again.

Transports

INotificationSender is the seam. The Firebase package implements it over FirebaseAdmin and classifies FCM's answers — an unregistered token is a dead device, a quota or server error is transient. Credentials come from the host through IFirebaseCredentialSource, so this package never decides where your service-account key lives.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net9.0

    • No dependencies.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Nedo.AspNet.Notifications.Abstractions:

Package Downloads
Nedo.AspNet.Notifications

Store-and-forward notification dispatch: persisted messages and per-recipient deliveries, a background dispatcher with retry and backoff, device-token registration, and template rendering. Bring your own transport by registering an INotificationSender (see Nedo.AspNet.Notifications.Firebase).

Nedo.AspNet.Notifications.Firebase

Firebase Cloud Messaging transport for Nedo.AspNet.Notifications: an INotificationSender over FirebaseAdmin, error classification that separates a dead device token from a transient failure, and credential loading the host supplies.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 161 9/24/2026