LNotification 0.5.1
dotnet add package LNotification --version 0.5.1
NuGet\Install-Package LNotification -Version 0.5.1
<PackageReference Include="LNotification" Version="0.5.1" />
<PackageVersion Include="LNotification" Version="0.5.1" />
<PackageReference Include="LNotification" />
paket add LNotification --version 0.5.1
#r "nuget: LNotification, 0.5.1"
#:package LNotification@0.5.1
#addin nuget:?package=LNotification&version=0.5.1
#tool nuget:?package=LNotification&version=0.5.1
LNotification
Provider-based notification service with a minimal public surface. Consumers only use
NotificationService, provider marker types, and appsettings.json.
Install
dotnet add package LNotification
Register
using LNotification;
using LNotification.Providers;
NotificationService.AddLNotification(builder.Services, builder.Configuration);
Or load from a dedicated JSON file (relative or absolute path, reloads on change):
using LNotification;
using LNotification.Providers;
NotificationService.AddLNotification(builder.Services, "lnotification.json");
The JSON file should include a top-level LNotification section.
Send notifications
using LNotification;
using LNotification.Providers;
var notifier = app.Services.GetRequiredService<NotificationService>();
await notifier.SendAsync<SlackProvider>("Hello");
await notifier.SendAsync("Slack", "Hello by name"); // provider selected by name, same as SendAsync<SlackProvider>
await notifier.SendAsync<DiscordProvider, DiscordProvider.DiscordSendOptions>(
"**Build OK**",
o =>
{
o.ContentFormat = MessageContentFormat.Markdown;
o.Username = "Build Bot";
});
// Teams example with custom title and summary
await notifier.SendAsync<TeamsProvider, TeamsProvider.TeamsSendOptions>(
"Service started",
o =>
{
o.ContentFormat = MessageContentFormat.PlainText;
o.Title = "Service";
o.Summary = "Service Alert";
});
Supported providers:
- SlackProvider
- TelegramProvider
- DiscordProvider
- TeamsProvider
- FeishuProvider
- EmailProvider
- WebhookProvider
- NtfyProvider
- GotifyProvider
- PushoverProvider
- LineProvider
- MattermostProvider
- GoogleChatProvider
- MsGraphEmailProvider
Configuration
See examples/appsettings.sample.json for a full example. The configuration section is
LNotification and accepts MaxRetries, RetryDelayMs, TimeoutSeconds, and a Providers array.
Example snippet:
{
"LNotification": {
"MaxRetries": 3,
"RetryDelayMs": 1000,
"TimeoutSeconds": 30,
"Providers": [
{
"Provider": "Slack",
"Alias": "default",
"WebhookUrl": "https://example.com/webhook"
}
]
}
}
Configuration is validated when NotificationService is created: enabled providers must have their
required fields, and aliases must be unique per provider. Entries with an unknown or missing Provider
are ignored with a warning. When the configuration file changes at runtime, an invalid new configuration
is logged and the previous one stays active.
You can select a specific provider configuration by passing the alias argument to
SendAsync. Without an alias, the configuration with alias default is used, otherwise the
first enabled configuration of that provider.
Failed sends are retried (MaxRetries, exponential backoff from RetryDelayMs); HTTP 4xx responses other
than 408/429 are not retried. SendAsync returns false after the final failure.
Every SendAsync overload accepts an optional trailing CancellationToken
(SendAsync<SlackProvider>("Hello", cancellationToken: ct)). Cancelling it aborts the HTTP call or
retry delay and throws OperationCanceledException instead of returning false.
SendOptions are applied as: defaults → config → per-call. Per-call customization uses
Action<TOptions>; the patch runs on a cloned copy, so config/defaults are never mutated.
The effective default for SendOptions.ContentFormat is PlainText.
License
LNotification is released under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. 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 is compatible. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Configuration.Abstractions (>= 6.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 6.0.0)
- Microsoft.Extensions.Configuration.Json (>= 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 6.0.0)
- Microsoft.Extensions.Http (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.0)
- System.Net.Http.Json (>= 8.0.1)
-
net10.0
- Microsoft.Extensions.Configuration.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 8.0.0)
- Microsoft.Extensions.Configuration.Json (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Http (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.