Skip to content

Commit d22b125

Browse files
committed
Add Multitenancy.AspNetCore extension documentation
Introduced documentation for the new CleanArchitecture.Extensions.Multitenancy.AspNetCore package, including usage, installation, and integration details. Updated extension catalog, quickstart, roadmap, and package blueprints to reflect the addition and shipping status of the ASP.NET Core multitenancy adapter.
1 parent ee74b21 commit d22b125

File tree

6 files changed

+140
-19
lines changed

6 files changed

+140
-19
lines changed

docs/extensions/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ A small catalog of opt-in extensions designed to plug into Jason Taylor's Clean
66

77
- **CleanArchitecture.Extensions.Caching** — cache abstractions plus query caching behavior: [Caching](caching.md)
88
- **CleanArchitecture.Extensions.Multitenancy** — tenant resolution and enforcement primitives: [Multitenancy Core](multitenancy-core.md)
9+
- **CleanArchitecture.Extensions.Multitenancy.AspNetCore** — ASP.NET Core middleware and endpoint helpers: [Multitenancy.AspNetCore](multitenancy-aspnetcore.md)
910

1011
## Planned
1112

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# Extension: Multitenancy.AspNetCore
2+
3+
## Overview
4+
ASP.NET Core adapters for the multitenancy core package. This extension provides middleware to populate `TenantResolutionContext`, endpoint filters for tenant enforcement, and helpers for minimal APIs and MVC.
5+
6+
## When to use
7+
8+
- You need tenant resolution and enforcement for HTTP requests.
9+
- You want minimal API helpers to mark tenant-required endpoints.
10+
- You want consistent ProblemDetails responses for multitenancy errors.
11+
12+
## Prereqs & Compatibility
13+
14+
- Target frameworks: `net10.0`.
15+
- Dependencies: `CleanArchitecture.Extensions.Multitenancy` and ASP.NET Core (`Microsoft.AspNetCore.App`).
16+
- Host adapter: use the provided middleware to populate tenant context.
17+
18+
## Install
19+
20+
```bash
21+
dotnet add src/YourWebProject/YourWebProject.csproj package CleanArchitecture.Extensions.Multitenancy.AspNetCore
22+
```
23+
24+
## Usage
25+
26+
### Register services and middleware
27+
28+
```csharp
29+
using CleanArchitecture.Extensions.Multitenancy.AspNetCore;
30+
using CleanArchitecture.Extensions.Multitenancy.AspNetCore.Middleware;
31+
32+
builder.Services.AddCleanArchitectureMultitenancyAspNetCore();
33+
34+
var app = builder.Build();
35+
app.UseCleanArchitectureMultitenancy();
36+
```
37+
38+
### Minimal API enforcement
39+
40+
```csharp
41+
using CleanArchitecture.Extensions.Multitenancy.AspNetCore.Routing;
42+
43+
app.MapGroup("/tenants/{tenantId}")
44+
.AddTenantEnforcement()
45+
.RequireTenant()
46+
.MapGet("/profile", () => Results.Ok());
47+
```
48+
49+
### MVC enforcement
50+
51+
```csharp
52+
using CleanArchitecture.Extensions.Multitenancy.AspNetCore;
53+
54+
builder.Services
55+
.AddControllers()
56+
.AddMultitenancyEnforcement();
57+
```
58+
59+
### Options
60+
61+
```csharp
62+
using CleanArchitecture.Extensions.Multitenancy.AspNetCore;
63+
using CleanArchitecture.Extensions.Multitenancy.AspNetCore.Options;
64+
using CleanArchitecture.Extensions.Multitenancy.Configuration;
65+
66+
builder.Services.AddCleanArchitectureMultitenancyAspNetCore(
67+
coreOptions =>
68+
{
69+
coreOptions.HeaderNames = new[] { "X-Tenant-ID" };
70+
coreOptions.RouteParameterName = "tenantId";
71+
},
72+
aspNetOptions =>
73+
{
74+
aspNetOptions.CorrelationIdHeaderName = "X-Correlation-ID";
75+
aspNetOptions.StoreTenantInHttpContextItems = true;
76+
});
77+
```
78+
79+
## ProblemDetails mapping
80+
81+
```csharp
82+
using CleanArchitecture.Extensions.Multitenancy.AspNetCore.ProblemDetails;
83+
84+
if (TenantProblemDetailsMapper.TryCreate(exception, httpContext, out var details))
85+
{
86+
return Results.Problem(details);
87+
}
88+
```
89+
90+
## Pipeline ordering
91+
92+
Recommended middleware order for HTTP pipelines:
93+
94+
- Correlation
95+
- Localization
96+
- Multitenancy resolution
97+
- Authentication
98+
- Authorization
99+
- MVC/minimal API handlers
100+
101+
## Key components
102+
103+
- `TenantResolutionMiddleware`
104+
- `TenantEnforcementEndpointFilter` / `TenantEnforcementActionFilter`
105+
- `EndpointConventionBuilderExtensions`
106+
- `AspNetCoreMultitenancyOptions`

docs/extensions/multitenancy-core.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ sequenceDiagram
157157
- Validation warnings: register `ITenantInfoStore`/`ITenantInfoCache` when using cache/repository validation.
158158
- Ambiguous candidates: ensure headers/queries contain only one tenant ID.
159159

160-
## Roadmap (planned adapters)
161-
162-
- Multitenancy.AspNetCore
163-
- Multitenancy.EFCore
164-
- Multitenancy.Identity
165-
- Multitenancy.Provisioning
166-
- Multitenancy.Redis
167-
- Multitenancy.Sharding
168-
- Multitenancy.Storage
160+
## Related modules
161+
162+
- Multitenancy.AspNetCore (shipped)
163+
- Multitenancy.EFCore (planned)
164+
- Multitenancy.Identity (planned)
165+
- Multitenancy.Provisioning (planned)
166+
- Multitenancy.Redis (planned)
167+
- Multitenancy.Sharding (planned)
168+
- Multitenancy.Storage (planned)

docs/index.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ CleanArchitecture.Extensions is a small set of opt-in NuGet packages that plug i
66

77
- `CleanArchitecture.Extensions.Caching`
88
- `CleanArchitecture.Extensions.Multitenancy`
9+
- `CleanArchitecture.Extensions.Multitenancy.AspNetCore`
910

1011
## Quickstart
1112

@@ -31,11 +32,22 @@ services.AddCleanArchitectureMultitenancy();
3132
services.AddMediatR(cfg => cfg.AddCleanArchitectureMultitenancyPipeline());
3233
```
3334

35+
Multitenancy.AspNetCore:
36+
37+
```powershell
38+
dotnet add package CleanArchitecture.Extensions.Multitenancy.AspNetCore
39+
```
40+
41+
```csharp
42+
services.AddCleanArchitectureMultitenancyAspNetCore();
43+
```
44+
3445
No other template changes required.
3546

3647
## Where to go next
3748

3849
- Caching docs: [extensions/caching.md](extensions/caching.md)
3950
- Multitenancy docs: [extensions/multitenancy-core.md](extensions/multitenancy-core.md)
51+
- Multitenancy.AspNetCore docs: [extensions/multitenancy-aspnetcore.md](extensions/multitenancy-aspnetcore.md)
4052
- Extensions catalog: [extensions/index.md](extensions/index.md)
4153
- Roadmap: [roadmap.md](roadmap.md)

docs/roadmap.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55
- **CleanArchitecture.Extensions.Caching** — cache abstractions, adapters, and query caching behavior.
66
- **Multitenancy Core** — tenant model, resolution providers, enforcement behavior.
7+
- **Multitenancy.AspNetCore** — middleware and endpoint enforcement for HTTP.
78

89
## Next
910

10-
- **Multitenancy adapters** — EFCore, AspNetCore, Identity (planned).
11+
- **Multitenancy adapters** — EFCore, Identity (planned).
1112
- **Caching adapters** — Redis and other distributed stores (planned).

docs/roadmap/package-blueprints.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,28 @@ Design notes:
2727
- HighLevelDocs/Domain2-Multitenancy/CleanArchitecture.Extensions.Multitenancy.md
2828
- Docs: [docs/extensions/multitenancy-core.md](../extensions/multitenancy-core.md)
2929

30-
## CleanArchitecture.Extensions.Multitenancy.EFCore (planned)
30+
## CleanArchitecture.Extensions.Multitenancy.AspNetCore (shipped)
3131

32-
What it will provide:
32+
What it provides:
3333

34-
- Tenant-aware DbContext helpers and filters.
35-
- Patterns for shared and schema-per-tenant databases.
34+
- Middleware and endpoint helpers for tenant resolution.
35+
- Minimal API and MVC enforcement filters.
3636

3737
Design notes:
3838

39-
- HighLevelDocs/Domain2-Multitenancy/CleanArchitecture.Extensions.Multitenancy.EFCore.md
39+
- HighLevelDocs/Domain2-Multitenancy/CleanArchitecture.Extensions.Multitenancy.AspNetCore.md
40+
- Docs: [docs/extensions/multitenancy-aspnetcore.md](../extensions/multitenancy-aspnetcore.md)
4041

41-
## CleanArchitecture.Extensions.Multitenancy.AspNetCore (planned)
42+
## CleanArchitecture.Extensions.Multitenancy.EFCore (planned)
4243

4344
What it will provide:
4445

45-
- Middleware and endpoint helpers for tenant resolution.
46-
- Minimal API and controller integration points.
46+
- Tenant-aware DbContext helpers and filters.
47+
- Patterns for shared and schema-per-tenant databases.
4748

4849
Design notes:
4950

50-
- HighLevelDocs/Domain2-Multitenancy/CleanArchitecture.Extensions.Multitenancy.AspNetCore.md
51+
- HighLevelDocs/Domain2-Multitenancy/CleanArchitecture.Extensions.Multitenancy.EFCore.md
5152

5253
## CleanArchitecture.Extensions.Multitenancy.Identity (planned)
5354

0 commit comments

Comments
 (0)