Auderz.Shared.DevMode
1.2.0
dotnet add package Auderz.Shared.DevMode --version 1.2.0
NuGet\Install-Package Auderz.Shared.DevMode -Version 1.2.0
<PackageReference Include="Auderz.Shared.DevMode" Version="1.2.0" />
<PackageVersion Include="Auderz.Shared.DevMode" Version="1.2.0" />
<PackageReference Include="Auderz.Shared.DevMode" />
paket add Auderz.Shared.DevMode --version 1.2.0
#r "nuget: Auderz.Shared.DevMode, 1.2.0"
#:package Auderz.Shared.DevMode@1.2.0
#addin nuget:?package=Auderz.Shared.DevMode&version=1.2.0
#tool nuget:?package=Auderz.Shared.DevMode&version=1.2.0
Auderz.Shared
Building blocks for .NET 10 microservices: vertical-slice plumbing, permission-based authorization, an event backbone on Kafka with a transactional outbox, a configurable Quartz job manager, Redis caching, localisation and OpenTelemetry observability.
These packages were built for the Auderz platform and are published because they are useful on their own. They are opinionated — the conventions below are baked in rather than configurable — so they suit a service being built to fit them better than one being retrofitted.
Install
One reference gets the core set:
<PackageReference Include="Auderz.Shared" Version="1.1.0" />
Auderz.Shared is a metapackage with no code of its own. It carries a pinned dependency set:
Kernel, Vsa, Authorization, Localization, Messaging, Observability, Jobs,
Jobs.EntityFrameworkCore, Jobs.Api and Notifications.Abstractions.
Two packages sit deliberately outside it, because not every service should carry them:
<PackageReference Include="Auderz.Shared.Caching" Version="1.1.0" />
<PackageReference Include="Auderz.Shared.DevMode" Version="1.1.0" />
Auderz.Shared.DevMode replaces the email, SMS and push senders with capturing ones. Referencing
it from a Release build is a service that silently stops sending real notifications, so it belongs
behind an environment check or a Condition on the reference.
Packages
| Package | What it is |
|---|---|
Auderz.Shared |
Metapackage. The pinned core dependency set, no code. |
Auderz.Shared.Kernel |
Domain primitives: Result/Error, Entity, AggregateRoot, domain events, auditing and concurrency contracts, guards, id generation, and IANA time-zone helpers for wall-clock schedules and civil dates. |
Auderz.Shared.Vsa |
Vertical-slice plumbing: MediatR behind an IDispatcher abstraction, a FluentValidation pipeline behaviour that runs before any handler, self-registering endpoint slices, and a response adapter. |
Auderz.Shared.Authorization |
Permission-based authorization: a dynamic policy provider so permissions need no policy registration, an admin wildcard, deny-overrides, and an injectable authorization context carrying the caller's identity, permissions and culture. |
Auderz.Shared.Localization |
Embedded per-assembly JSON translation dictionaries merged at start-up, CLDR plural rules, and caller-culture formatting. Each assembly ships its own file and adds to the set. |
Auderz.Shared.Messaging |
Event backbone: a versioned wire envelope, a transactional outbox with a claim-based relay, a Kafka producer, and a consumer host with idempotent deduplication and dead-lettering. |
Auderz.Shared.Caching |
Redis caching with stampede protection, negative caching, stale-while-revalidate, three invalidation patterns, and a distributed geo index. |
Auderz.Shared.Observability |
OpenTelemetry traces and metrics, Serilog with a console and Seq sink, correlation-id propagation, and liveness/readiness endpoint conventions. |
Auderz.Shared.Notifications.Abstractions |
IEmailSender, ISmsSender, IPushSender, IOneTimeCodeGenerator and their message contracts. Contracts only — no provider. |
Auderz.Shared.DevMode |
Development-only sinks: captured email, SMS and push, predictable one-time codes, and a /_dev inbox with live updates. |
Auderz.Shared.Jobs |
A configurable background job manager on Quartz.NET 4: job definitions stored in the database with cron, time zone, enable/disable, JSON parameters, concurrency mode, misfire policy, retry and run history. |
Auderz.Shared.Jobs.EntityFrameworkCore |
SQL Server persistence for the job manager, a sp_getapplock-based execution lock so one node runs a job at a time, and the Quartz host wiring. |
Auderz.Shared.Jobs.Api |
The job manager's admin API as vertical slices: list, edit a schedule, pause, resume, trigger now, read run history. |
Requirements
- .NET 10. There is no multi-targeting and no
netstandardfallback. - SQL Server for the job manager, because Quartz's ADO job store with clustering needs it. Everything else is storage-agnostic.
- Kafka for
Auderz.Shared.Messaging, Redis forAuderz.Shared.Caching— both optional at the package level and switchable off in configuration, so a service runs locally without them.
Quick start
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
builder.AddAuderzObservability();
builder.Services.AddAuderzPermissionAuthorization(builder.Configuration);
builder.Services.AddAuderzTranslations(typeof(Program).Assembly);
builder.Services.AddAuderzMessaging(builder.Configuration);
builder.Services.AddAuderzCaching(builder.Configuration);
// Handlers, validators and endpoint slices, discovered by assembly scan.
builder.Services.AddAuderzDispatcher(typeof(Program).Assembly);
builder.Services.AddAuderzEndpoints(typeof(Program).Assembly);
WebApplication app = builder.Build();
app.UseAuderzObservability();
app.UseAuthentication();
app.UseAuthorization();
app.MapAuderzEndpoints();
app.MapAuderzHealthChecks();
await app.RunAsync();
Conventions baked in
- Vertical Slice Architecture. A feature is a folder holding its own contracts, handler, repository, validators and models — not a row through Domain/Application/Infrastructure projects.
- CQRS through MediatR, behind
IDispatcher. Slices name the Auderz interfaces (ICommand,IQuery<T>,IPagedQuery<T>and their handlers); MediatR does the dispatching, so it can be replaced in one file. - All request validation is FluentValidation, run by a pipeline behaviour before any handler sees the request — so it cannot be forgotten when someone adds a slice.
- Handlers return asom.lib response types
(
CommandResponse,CommandResponse<T>,PagedCommandResponse<T>), built through one adapter. Domain aggregates returnResult/Errorand convert at the slice boundary. Paging is asom.lib'sPagedDataCriteriaend to end and money is itsMoneystruct. If you do not want asom.lib in your graph, these packages are not for you — it is a hard dependency ofKernel. - Quartz.NET 4, not 3.x.
Auderz.Shared.Jobstargets the single-package Quartz 4: the DependencyInjection, Hosting and SystemTextJson extension packages were folded intoQuartz, and referencing them alongside it gives you two copies of the same extension methods.IJob.ExecutereturnsValueTask.
Versioning
All Auderz.Shared.* packages share one version and are released together. Pin them as a set.
A mixed set — Kernel 1.1.0 against Vsa 1.0.0 — does not fail at build; it fails at load with a
MissingMethodException, which is a much worse afternoon.
With central package management, keep the individual PackageVersion entries alongside the
metapackage and turn on CentralPackageTransitivePinningEnabled: that pins what the metapackage
pulls in, so a transitive resolve cannot quietly land a different build.
Versions on nuget.org are permanent. A fix to a released version is the next patch, never a re-push.
Symbols
Symbol packages (.snupkg) are published, so a stack trace through Auderz.Shared.* gives you
method names and line numbers. Source stepping is not available — the repository is private.
Licence
MIT. See the licence link on the package page.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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. |
-
net10.0
- asom.lib (>= 1.0.20)
- Auderz.Shared.Kernel (>= 1.2.0)
- Auderz.Shared.Notifications.Abstractions (>= 1.2.0)
- Auderz.Shared.Vsa (>= 1.2.0)
- FluentValidation (>= 12.1.1)
- FluentValidation.DependencyInjectionExtensions (>= 12.1.1)
- MediatR (>= 12.5.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.2.0 | 84 | 9/19/2026 |
| 1.1.1-beta-1 | 69 | 9/15/2026 |