diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6c1d04e..12c927f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [1.0.1] - 2026-06-20
+
+### Added
+- DI registration extensions in `MaksIT.HAMode.Extensions.ServiceCollectionExtensions` for runtime instance id and backend-specific lease service wiring (`PostgreSql`, `Redis`, `Etcd`).
+
+### Changed
+- Updated package/release setup to publish `MaksIT.HAMode` as the primary distributable library for version `1.0.1`.
+- Updated several dependency versions across HAMode projects.
+
## [1.0.0] - 2026-06-20
### Added
diff --git a/README.md b/README.md
index 2c1c14f..a56e6bc 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,7 @@ Reusable high-availability runtime coordination library for MaksIT services.
## Packages
- `MaksIT.HAMode` (single NuGet package)
+ - `MaksIT.HAMode.Extensions.ServiceCollectionExtensions`
- `MaksIT.HAMode.Abstractions` namespace:
- `IRuntimeInstanceId`
- `IRuntimeLeaseService`
@@ -46,52 +47,50 @@ Reusable high-availability runtime coordination library for MaksIT services.
```xml
-
+
```
### Shared runtime instance id
```csharp
-using MaksIT.HAMode.Abstractions;
+using MaksIT.HAMode.Extensions;
-builder.Services.AddSingleton();
+builder.Services.AddHAModeRuntimeInstanceId();
```
### PostgreSQL backend
```csharp
using MaksIT.HAMode.Abstractions;
-using MaksIT.HAMode.PostgreSql;
+using MaksIT.HAMode.Extensions;
public sealed class MyPgLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseConnectionStringProvider {
public string ConnectionString => cfg["Configuration:Engine:ConnectionString"]!;
}
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
+builder.Services.AddHAModePostgreSql();
```
### Redis backend
```csharp
using MaksIT.HAMode.Abstractions;
-using MaksIT.HAMode.Redis;
+using MaksIT.HAMode.Extensions;
public sealed class MyRedisLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseRedisConnectionProvider {
public string Configuration => cfg["Configuration:Redis:ConnectionString"]!;
public string KeyPrefix => "my-app/runtime-leases:";
}
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
+builder.Services.AddHAModeRedis();
```
### etcd backend
```csharp
using MaksIT.HAMode.Abstractions;
-using MaksIT.HAMode.Etcd;
+using MaksIT.HAMode.Extensions;
public sealed class MyEtcdLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseEtcdConnectionProvider {
public string Endpoints => cfg["Configuration:Etcd:Endpoints"]!; // ex: http://etcd:2379
@@ -100,8 +99,7 @@ public sealed class MyEtcdLeaseConnectionProvider(IConfiguration cfg) : IRuntime
public string KeyPrefix => "my-app/runtime-leases/";
}
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
+builder.Services.AddHAModeEtcd();
```
### Runtime acquire/release flow
@@ -147,7 +145,7 @@ In `MaksIT.Vault.Engine.csproj`:
```xml
-
+
```
@@ -209,7 +207,7 @@ In `MaksIT.CertsUI.Engine.csproj`:
```xml
-
+
```
diff --git a/src/MaksIT.HAMode.Abstractions/MaksIT.HAMode.Abstractions.csproj b/src/MaksIT.HAMode.Abstractions/MaksIT.HAMode.Abstractions.csproj
index 73a315d..fda7c6b 100644
--- a/src/MaksIT.HAMode.Abstractions/MaksIT.HAMode.Abstractions.csproj
+++ b/src/MaksIT.HAMode.Abstractions/MaksIT.HAMode.Abstractions.csproj
@@ -34,6 +34,7 @@
+
diff --git a/src/MaksIT.HAMode.Etcd/MaksIT.HAMode.Etcd.csproj b/src/MaksIT.HAMode.Etcd/MaksIT.HAMode.Etcd.csproj
index 02550c0..a27cc0a 100644
--- a/src/MaksIT.HAMode.Etcd/MaksIT.HAMode.Etcd.csproj
+++ b/src/MaksIT.HAMode.Etcd/MaksIT.HAMode.Etcd.csproj
@@ -34,9 +34,9 @@
-
+
-
+
diff --git a/src/MaksIT.HAMode.PostgreSql/MaksIT.HAMode.PostgreSql.csproj b/src/MaksIT.HAMode.PostgreSql/MaksIT.HAMode.PostgreSql.csproj
index 1ca8d55..dcba7a2 100644
--- a/src/MaksIT.HAMode.PostgreSql/MaksIT.HAMode.PostgreSql.csproj
+++ b/src/MaksIT.HAMode.PostgreSql/MaksIT.HAMode.PostgreSql.csproj
@@ -34,7 +34,7 @@
-
+
diff --git a/src/MaksIT.HAMode.Redis/MaksIT.HAMode.Redis.csproj b/src/MaksIT.HAMode.Redis/MaksIT.HAMode.Redis.csproj
index cb9c8ae..05f2923 100644
--- a/src/MaksIT.HAMode.Redis/MaksIT.HAMode.Redis.csproj
+++ b/src/MaksIT.HAMode.Redis/MaksIT.HAMode.Redis.csproj
@@ -34,8 +34,8 @@
-
-
+
+
diff --git a/src/MaksIT.HAMode.Tests/MaksIT.HAMode.Tests.csproj b/src/MaksIT.HAMode.Tests/MaksIT.HAMode.Tests.csproj
index 6d2bdac..6f06e32 100644
--- a/src/MaksIT.HAMode.Tests/MaksIT.HAMode.Tests.csproj
+++ b/src/MaksIT.HAMode.Tests/MaksIT.HAMode.Tests.csproj
@@ -14,11 +14,11 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/src/MaksIT.HAMode/Extensions/ServiceCollectionExtensions.cs b/src/MaksIT.HAMode/Extensions/ServiceCollectionExtensions.cs
new file mode 100644
index 0000000..32b6241
--- /dev/null
+++ b/src/MaksIT.HAMode/Extensions/ServiceCollectionExtensions.cs
@@ -0,0 +1,80 @@
+using MaksIT.HAMode.Abstractions;
+using MaksIT.HAMode.Etcd;
+using MaksIT.HAMode.PostgreSql;
+using MaksIT.HAMode.Redis;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace MaksIT.HAMode.Extensions;
+
+///
+/// DI registration helpers for HAMode abstractions and backend implementations.
+///
+public static class ServiceCollectionExtensions {
+ ///
+ /// Registers default runtime instance id provider as singleton.
+ ///
+ public static IServiceCollection AddHAModeRuntimeInstanceId(this IServiceCollection services) {
+ services.AddSingleton();
+ return services;
+ }
+
+ ///
+ /// Registers only PostgreSQL-backed runtime lease service.
+ ///
+ public static IServiceCollection AddHAModePostgreSqlLease(this IServiceCollection services)
+ where TConnectionProvider : class, IRuntimeLeaseConnectionStringProvider {
+ services.AddSingleton();
+ services.AddSingleton();
+ return services;
+ }
+
+ ///
+ /// Registers full PostgreSQL HA mode scenario.
+ ///
+ public static IServiceCollection AddHAModePostgreSql(this IServiceCollection services)
+ where TConnectionProvider : class, IRuntimeLeaseConnectionStringProvider {
+ return services
+ .AddHAModeRuntimeInstanceId()
+ .AddHAModePostgreSqlLease();
+ }
+
+ ///
+ /// Registers only Redis-backed runtime lease service.
+ ///
+ public static IServiceCollection AddHAModeRedisLease(this IServiceCollection services)
+ where TConnectionProvider : class, IRuntimeLeaseRedisConnectionProvider {
+ services.AddSingleton();
+ services.AddSingleton();
+ return services;
+ }
+
+ ///
+ /// Registers full Redis HA mode scenario.
+ ///
+ public static IServiceCollection AddHAModeRedis(this IServiceCollection services)
+ where TConnectionProvider : class, IRuntimeLeaseRedisConnectionProvider {
+ return services
+ .AddHAModeRuntimeInstanceId()
+ .AddHAModeRedisLease();
+ }
+
+ ///
+ /// Registers only etcd-backed runtime lease service.
+ ///
+ public static IServiceCollection AddHAModeEtcdLease(this IServiceCollection services)
+ where TConnectionProvider : class, IRuntimeLeaseEtcdConnectionProvider {
+ services.AddSingleton();
+ services.AddSingleton();
+ return services;
+ }
+
+ ///
+ /// Registers full etcd HA mode scenario.
+ ///
+ public static IServiceCollection AddHAModeEtcd(this IServiceCollection services)
+ where TConnectionProvider : class, IRuntimeLeaseEtcdConnectionProvider {
+ return services
+ .AddHAModeRuntimeInstanceId()
+ .AddHAModeEtcdLease();
+ }
+}
diff --git a/src/MaksIT.HAMode/MaksIT.HAMode.csproj b/src/MaksIT.HAMode/MaksIT.HAMode.csproj
index da8729c..56ff5f4 100644
--- a/src/MaksIT.HAMode/MaksIT.HAMode.csproj
+++ b/src/MaksIT.HAMode/MaksIT.HAMode.csproj
@@ -6,10 +6,10 @@
enable
true
$(NoWarn);CS1591
- false
+ true
MaksIT.HAMode
- 1.0.0
+ 1.0.1
Maksym Sadovnychyy
MAKS-IT
MaksIT.HAMode
@@ -32,34 +32,19 @@
-
-
-
-
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
+