using Elsa.Common.Multitenancy;
using Elsa.Features.Abstractions;
using Elsa.Features.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Elsa.Common.Features;
public class MultitenancyFeature(IModule module) : FeatureBase(module)
{
private Func<IServiceProvider, ITenantsProvider> _tenantsProviderFactory = sp => sp.GetRequiredService<DefaultTenantsProvider>();
public MultitenancyFeature UseTenantsProvider<TTenantsProvider>() where TTenantsProvider : class, ITenantsProvider
Services.TryAddScoped<TTenantsProvider>();
return UseTenantsProvider(sp => sp.GetRequiredService<TTenantsProvider>());
}
public MultitenancyFeature UseTenantsProvider(Func<IServiceProvider, ITenantsProvider> tenantsProviderFactory)
_tenantsProviderFactory = tenantsProviderFactory;
return this;
public override void Apply()
Services
.AddSingleton<ITenantScopeFactory, DefaultTenantScopeFactory>()
.AddSingleton<ITenantAccessor, DefaultTenantAccessor>()
.AddScoped<DefaultTenantsProvider>()
.AddScoped<DefaultTenantResolver>()
.AddScoped(_tenantsProviderFactory);