Tenancy
For tenancy concepts and tenant resolution, see the tenancy overview.
This page focuses on MongoDB-specific tenant database naming through a custom database name resolver.
Custom Database Resolvers
You can create a custom database naming strategy by implementing a database name resolver and registering it with the MongoDB integration.
Custom Resolver Example
using Cratis.Arc.MongoDB;
using Cratis.Arc.Tenancy;
using Microsoft.Extensions.Options;
public class CustomMongoDatabaseNameResolver(
ITenantIdAccessor tenantIdAccessor,
IOptions<MongoDBOptions> options) : IMongoDatabaseNameResolver
{
public string Resolve()
{
var baseName = options.Value.Database;
var tenantId = tenantIdAccessor.Current;
return tenantId == TenantId.NotSet
? baseName
: $"{tenantId.Value}_{baseName}";
}
}
Registering the Resolver
builder.AddCratisArcMongoDB(mongodb =>
{
mongodb.WithDatabaseNameResolver<CustomMongoDatabaseNameResolver>();
});
When to Use a Custom Resolver
- Match existing naming conventions.
- Add environment or region prefixes.
- Integrate with legacy database layouts.
- Implement specialized isolation or sharding rules.