WesternBid.Tenancy 1.0.1

WesternBid.Tenancy

Library for implementing multi-tenancy in .NET applications using Microsoft.Extensions.DependencyInjection.

Features

  • Tenant context management via TenantService
  • Support for custom tenant resolution strategies
  • Built on Microsoft.Extensions.DependencyInjection
  • Easy configuration via IOptions pattern
  • Simple integration with ASP.NET Core and console applications

How to use

Define Tenant Options

public class AppTenantOptions : ITenantOptions
{
    public string Name { get; set; }
    public string ConnectionString { get; set; }
    public string Theme { get; set; }
    public bool IsActive { get; set; }
}

Define Tenant Resolver

public class HeaderTenantResolver : TenantResolverBase<AppTenantOptions>
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    
    public HeaderTenantResolver(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }
    
    public override AppTenantOptions GetTenant(List<AppTenantOptions> tenants)
    {
        var tenantName = _httpContextAccessor.HttpContext?
            .Request.Headers["X-Tenant"].FirstOrDefault();
        
        return tenants.FirstOrDefault(t => t.Name == tenantName);
    }
    
    public override string SetTenant(string tenantName)
    {
        var httpHeaders = _httpContextAccessor.HttpContext?.Request.Headers;
        
        if (httpHeaders != null)
        {
            httpHeaders["X-Tenant"] = tenantName;
        }
    }
}

Register in DI

// Configure tenants options
builder.Services.Configure<List<AppTenantOptions>>(
    builder.Configuration.GetSection("Tenants"));

// Add tenancy with header-based resolver
builder.Services.AddTenancy<AppTenantOptions, HeaderTenantResolver>();

// Add HTTP context accessor
builder.Services.AddHttpContextAccessor();

No packages depend on WesternBid.Tenancy.

.NET Standard 2.0

Version Downloads Last updated
1.0.2 6 1/14/2026
1.0.1 5 1/13/2026
1.0.0 5 1/6/2026
1.0.0-ci28 4 1/5/2026
1.0.0-ci27 4 1/5/2026
1.0.0-ci26 4 1/5/2026
1.0.0-ci25 4 1/5/2026