ConnectSoft.Extensions.Saas.* libraries¶
Cross-cutting SaaS concerns—tenant resolution, transport integration, NHibernate filter enablement, Orleans keys, billing/metering primitives, and testing—ship as ConnectSoft.Extensions.Saas.* NuGet packages. This follows Layer 1 in Template layering and reuse.
Repository rule¶
One Git repository per NuGet package. Each package versions and publishes independently.
Mandatory package set (program)¶
| Git repository | NuGet package | Responsibility |
|---|---|---|
ConnectSoft.Extensions.Saas.Abstractions |
ConnectSoft.Extensions.Saas.Abstractions |
ITenantContext, resolver contracts, TenantResolutionInput (JwtTenantClaimType), ITenantStore, ITenantConnectionResolver, ITenantOptionsSink, header/claim constants — no ASP.NET |
ConnectSoft.Extensions.Saas.Options |
ConnectSoft.Extensions.Saas.Options |
MultitenancyOptions binding + validation; ITenantStore / ITenantConnectionResolver / ITenantOptionsSink registrations (Saas.Options primitives) |
ConnectSoft.Extensions.Saas.AspNetCore |
ConnectSoft.Extensions.Saas.AspNetCore |
Middleware, DI, ITenantHttpResolutionContributor pipeline, forwards Saas.Options tenant primitives |
ConnectSoft.Extensions.Saas.AspNetCore.SignalR |
ConnectSoft.Extensions.Saas.AspNetCore.SignalR |
ASP.NET Core SignalR hub filters for multitenant tenancy resolution; pair with UseSignalR and ConnectSoft.Extensions.ServiceModel.SignalR where hubs are hosted |
ConnectSoft.Extensions.Saas.AspNetCore.Grpc |
ConnectSoft.Extensions.Saas.AspNetCore.Grpc |
gRPC server unary interceptor (tenant-id metadata); align metadata keys with MessagingTenantHeaderName when customizing brokers |
ConnectSoft.Extensions.Saas.Messaging.MassTransit |
ConnectSoft.Extensions.Saas.Messaging.MassTransit |
Inbound TenantConsumeContextFilter; outbound AddSaasTenantOutboundFilters (publish/send) |
ConnectSoft.Extensions.Saas.Messaging.NServiceBus |
ConnectSoft.Extensions.Saas.Messaging.NServiceBus |
TenantHeaderIncomingBehavior inbound tenant hydration |
ConnectSoft.Extensions.Saas.NHibernate |
ConnectSoft.Extensions.Saas.NHibernate |
EnableFilter helpers, session-scoped tenant parameter binding |
ConnectSoft.Extensions.Saas.Orleans |
ConnectSoft.Extensions.Saas.Orleans |
Grain key formatters, optional call-filter stubs |
ConnectSoft.Extensions.Saas.Billing |
ConnectSoft.Extensions.Saas.Billing |
Narrow cross-product billing tenancy primitives (interfaces; no domain duplication) |
ConnectSoft.Extensions.Saas.Metering |
ConnectSoft.Extensions.Saas.Metering |
Narrow metering/quota tenancy primitives |
ConnectSoft.Extensions.Saas.Testing |
ConnectSoft.Extensions.Saas.Testing |
Fakes, test host helpers |
Supporting libraries (existing repos, not new Saas repos): extend ConnectSoft.Extensions.EntityModel (tenant-scoped entity marker), ConnectSoft.Extensions.Logging.Serilog (tenant enricher), ConnectSoft.Extensions.Compliance (tenant ID redaction)—see ADR-0100.
Package handbooks and Integration¶
Per-repo MkDocs sites (overview, CI, Integration composition): SaaS extensions — package handbooks and integration.
Configuration and ADR¶
- Reference JSON: Multitenancy configuration schema
- Architecture: ADR-0100
Migration¶
Templates move from inlined stubs to package references using SAAS-EXT-F02 / SAAS-EXT-T02 (Company backlog)—SemVer pinning and breaking-change playbook applies to Abstractions.
Consumers¶
ConnectSoft.Saas.*TemplatemicroservicesConnectSoft.ApiGatewayTemplate(tenant propagation at the custom gateway—no YARP dependency)ConnectSoft.IdentityTemplateandConnectSoft.AuthorizationServerTemplate(tidand per-tenant auth alignment)ConnectSoft.Blazor.Shell.Saas(when present)
Relationship to the platform solution¶
See SaaS platform — solution plan for how Layer 1 packages feed templates (Layer 3); ServiceModel remains the public API for external clients.