Skip to content

Configuration reference

This page explains how to configure extensions using the Options pattern.

Section Options type Notes
Extensions:Caching CachingOptions Core caching defaults.
Extensions:Caching:QueryBehavior QueryCachingBehaviorOptions Query caching behavior settings.
Extensions:Multitenancy MultitenancyOptions Core multitenancy settings.
Extensions:Multitenancy:AspNetCore AspNetCoreMultitenancyOptions ASP.NET Core adapter settings.
Extensions:Multitenancy:EFCore EfCoreMultitenancyOptions EF Core adapter settings.

Example configuration

{
  "Extensions": {
    "Caching": {
      "Enabled": true,
      "DefaultNamespace": "MyApp",
      "MaxEntrySizeBytes": 262144,
      "QueryBehavior": {
        "DefaultTtl": "00:05:00",
        "CacheNullValues": false
      }
    },
    "Multitenancy": {
      "RequireTenantByDefault": true,
      "HeaderNames": ["X-Tenant-ID"],
      "RouteParameterName": "tenantId",
      "ValidationMode": "Repository",
      "AspNetCore": {
        "CorrelationIdHeaderName": "X-Correlation-ID",
        "StoreTenantInHttpContextItems": true
      },
      "EFCore": {
        "Mode": "SharedDatabase",
        "TenantIdPropertyName": "TenantId",
        "UseShadowTenantId": true
      }
    }
  }
}

Bind configuration in code

builder.Services.Configure<CachingOptions>(
    builder.Configuration.GetSection("Extensions:Caching"));

builder.Services.Configure<QueryCachingBehaviorOptions>(
    builder.Configuration.GetSection("Extensions:Caching:QueryBehavior"));

builder.Services.Configure<MultitenancyOptions>(
    builder.Configuration.GetSection("Extensions:Multitenancy"));

builder.Services.Configure<AspNetCoreMultitenancyOptions>(
    builder.Configuration.GetSection("Extensions:Multitenancy:AspNetCore"));

builder.Services.Configure<EfCoreMultitenancyOptions>(
    builder.Configuration.GetSection("Extensions:Multitenancy:EFCore"));

Options that must be set in code

Some options are delegates (for example, HostTenantSelector, SchemaNameProvider, ConnectionStringProvider). These cannot be bound from JSON and must be configured in code.

See also