![]() |
VOOZH | about |
dotnet add package SOFTURE.Common.Authentication --version 0.4.0
NuGet\Install-Package SOFTURE.Common.Authentication -Version 0.4.0
<PackageReference Include="SOFTURE.Common.Authentication" Version="0.4.0" />
<PackageVersion Include="SOFTURE.Common.Authentication" Version="0.4.0" />Directory.Packages.props
<PackageReference Include="SOFTURE.Common.Authentication" />Project file
paket add SOFTURE.Common.Authentication --version 0.4.0
#r "nuget: SOFTURE.Common.Authentication, 0.4.0"
#:package SOFTURE.Common.Authentication@0.4.0
#addin nuget:?package=SOFTURE.Common.Authentication&version=0.4.0Install as a Cake Addin
#tool nuget:?package=SOFTURE.Common.Authentication&version=0.4.0Install as a Cake Tool
A collection of reusable .NET libraries providing common infrastructure for building distributed, observable, and resilient microservices. Each module is published as an independent NuGet package and can be adopted incrementally.
| Package | Description |
|---|---|
| SOFTURE.Common.Authentication | JWT Bearer authentication setup and configuration |
| SOFTURE.Common.CQRS | CQRS middleware and validation behaviors for MediatR pipelines |
| SOFTURE.Common.Correlation | Request correlation ID tracking for distributed tracing |
| SOFTURE.Common.HealthCheck | Health check framework with standardized response format |
| SOFTURE.Common.Logging | Structured logging with Serilog and Seq integration |
| SOFTURE.Common.Observability | OpenTelemetry tracing and metrics (Prometheus, OTLP) |
| SOFTURE.Common.Resilience | HTTP resilience policies — retry, circuit breaker, hedging, fallback |
| SOFTURE.Common.StronglyTypedIdentifiers | Strongly-typed ID abstractions with EF Core and FastEndpoints support |
| SOFTURE.Common.Web | Web application bootstrap helpers — culture enforcement and data protection keys persistence |
| SOFTURE.MessageBroker.Rabbit | RabbitMQ message publishing and consuming via MassTransit |
Install the packages you need via NuGet:
dotnet add package SOFTURE.Common.Authentication
dotnet add package SOFTURE.Common.CQRS
dotnet add package SOFTURE.Common.Correlation
dotnet add package SOFTURE.Common.HealthCheck
dotnet add package SOFTURE.Common.Logging
dotnet add package SOFTURE.Common.Observability
dotnet add package SOFTURE.Common.Resilience
dotnet add package SOFTURE.Common.StronglyTypedIdentifiers
dotnet add package SOFTURE.Common.Web
dotnet add package SOFTURE.MessageBroker.Rabbit
All modules integrate through IServiceCollection extension methods in your Program.cs or Startup.cs.
Configures JWT Bearer authentication with symmetric key signing.
services.AddCommonAuthentication<AppSettings>();
Your settings class must implement IAuthenticationSettings and provide:
JwtSecret — symmetric signing keyValidAudience — expected token audienceValidIssuer — expected token issuerRegisters MediatR pipeline behaviors for automatic command validation using FluentValidation.
services.AddMiddlewares();
Sets up Serilog with console output and Seq sink. Automatically registers a Seq health check.
services.AddCommonLogging<AppSettings>();
Your settings class must implement ISeqSettings and provide:
Url — Seq server endpointApiKey — Seq API keyConfigures OpenTelemetry with ASP.NET Core, HttpClient, EF Core, and Npgsql instrumentation. Exports metrics via Prometheus and traces via OTLP.
services.AddCommonObservability<AppSettings>();
// In the pipeline:
app.UseCommonOpenTelemetry();
Your settings class must implement IObservabilitySettings and provide:
Url — OTLP collector endpointRegisters a named resilience pipeline ("retry") with hedging, fallback, retry (exponential backoff with jitter), and circuit breaker strategies.
services.AddCommonResilience();
Usage in application code:
// Inject ResiliencePipelineProvider<string>
var pipeline = pipelineProvider.GetPipeline<HttpResponseMessage>("retry");
var response = await pipeline.ExecuteAsync(
async token => await httpClient.GetAsync("https://api.example.com", token), ct);
Registers a scoped correlation ID provider for request tracking across services.
services.AddCommonCorrelationProvider();
Registers custom health checks with a standardized /hc endpoint.
services.AddCommonHealthCheck<MyCustomHealthCheck>();
// In the pipeline:
app.MapCommonHealthChecks();
Health check classes must extend CheckBase and implement ICommonHealthCheck.
Configures MassTransit with RabbitMQ for publishing and consuming messages. Includes in-memory outbox, correlation logging filters, and automatic consumer discovery.
Publisher:
services.AddCommonPublisher<AppSettings>();
Consumer:
services.AddCommonConsumers<AppSettings>(
assembly: typeof(Program).Assembly,
retryCount: 3,
prefetchCount: 50,
exponentialRetry: true);
Your settings class must implement IRabbitSettings and provide:
Url — RabbitMQ connection URLName — queue name (consumers only)Consumer classes are discovered automatically — any non-abstract class implementing IConsumer<IMessage> or IConsumer<IBulkMessage> in the provided assembly will be registered.
Provides type-safe entity identifiers with EF Core value converters and JSON serialization support for FastEndpoints.
EF Core configuration (in DbContext):
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder.ConfigureStronglyIdentifiers<LanguageAssemblyMarker>();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ConfigureStronglyIdentifiers();
}
JSON serialization:
jsonOptions.RegisterStronglyTypedIdConverters<LanguageAssemblyMarker>();
Supports Guid, int, and long identifier value types.
Bootstrap helpers for ASP.NET Core applications — globally enforces a culture and persists Data Protection keys to disk.
Culture enforcement:
services.AddCommonCulture(new CultureInfo("pl-PL"));
// In the pipeline (web APIs only — applies the enforced culture to every request):
app.UseRequestLocalization();
Sets CultureInfo.DefaultThreadCurrentCulture / DefaultThreadCurrentUICulture and restricts RequestLocalizationOptions to the provided culture as the single supported one — requests with Accept-Language mismatches fall back to the enforced culture.
Data Protection keys persistence:
services.AddCommonDataProtection("/tmp/dataprotection-keys");
Persists the ASP.NET Core Data Protection key ring to the given filesystem path — required for containerized deployments where keys must survive restarts and be shared across instances.
Request context logging middleware:
// In the pipeline:
app.UseCommonRequestContextLogging();
Reads the X-Correlation-ID header (or generates one), stores it in ICorrelationProvider, and enriches Serilog LogContext with a CorrelationId property for the duration of the request. Requires SOFTURE.Common.Correlation (transitive) and Serilog for log enrichment.
| Framework | Status |
|---|---|
| .NET 6.0 | Supported |
| .NET 8.0 | Supported |
| .NET 9.0 | Supported |
| .NET 10.0 | Supported |
Contributions are welcome! To get started:
git checkout -b feature/my-feature)git commit -m 'Add my feature')git push origin feature/my-feature)cd API
dotnet restore
dotnet build
Each package has its own GitHub Actions workflow. To release a new version:
1.0.0)This project is licensed under the MIT License — see the file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 net6.0 is compatible. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.4.0 | 103 | 4/19/2026 |
| 0.3.1 | 101 | 4/7/2026 |
| 0.3.0 | 108 | 3/13/2026 |
| 0.2.4 | 438 | 11/20/2025 |
| 0.2.3 | 426 | 11/20/2025 |
| 0.2.2 | 423 | 11/20/2025 |
| 0.2.1 | 436 | 11/19/2025 |
| 0.2.0 | 428 | 11/19/2025 |
| 0.1.4 | 211 | 11/15/2025 |
| 0.1.3 | 173 | 6/27/2025 |
| 0.1.2 | 190 | 6/27/2025 |
| 0.1.1 | 322 | 11/26/2024 |
| 0.1.0 | 160 | 11/26/2024 |
| 0.0.10 | 202 | 9/21/2024 |
See https://github.com/SOFTURE/API/blob/master/CHANGELOG.md for release notes.