//<inheritdoc/> public IEnumerable<Tenant> GetEnabledTenants() { var fileProvider = _hostingEnvironment.ContentRootFileProvider; var tenantFolders = fileProvider .GetDirectoryContents("tenants") .Where(info => info.IsDirectory); foreach (var tenantFolder in tenantFolders) { var tenantFileName = "tenant.json"; var tenantDirectoryPath = Path.Combine("tenants", tenantFolder.Name); var tenantFilePath = Path.Combine(tenantDirectoryPath, tenantFileName); var tenantFileInfo = fileProvider.GetFileInfo(tenantFilePath); if (tenantFileInfo.Exists) { var builder = new ConfigurationBuilder(); builder.SetFileProvider(fileProvider); builder.AddJsonFile(tenantFilePath); var config = builder.Build(); var tenant = new Tenant { TenantId = tenantFolder.Name, Configuration = config, Identities = config.GetSection("Identities").GetChildren().Select(t => t.Value), Extensions = config.GetSection("Extensions").GetChildren().Select(t => t.Value), Path = tenantFolder.PhysicalPath }; yield return tenant; } } }
//<inheritdoc /> public void UnloadContext(Tenant tenant) { ITenantContext context; if (_tenantContexts.TryRemove(tenant.TenantId, out context)) { } }
/// <summary> /// Creates instance of <see cref="TenantPipelineFactory"/>. /// </summary> public TenantPipelineFactory( IServiceProvider serviceProvider, Tenant tenant, IEnumerable<IRouteProvider> routeProviders, IEnumerable<IMiddleware> middlewareProviders, ILoggerFactory loggerFactory) { _serviceProvider = serviceProvider; _tenant = tenant; _routeProviders = routeProviders; _middlewareProviders = middlewareProviders; _logger = loggerFactory.CreateLogger<TenantPipelineFactory>(); }
/// <summary> /// Constructs new instance of <see cref="TenantContext"/>. /// </summary> /// <param name="services">Tenant rescricted <see cref="IServiceProvider"/></param> /// <param name="tenant">Tenant object which represents this context.</param> public TenantContext(IServiceProvider services, Tenant tenant) { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (tenant == null) { throw new ArgumentNullException(nameof(tenant)); } Services = services; Tenant = tenant; States = new StateCollection(); }
//<inheritdoc /> public IServiceProvider CreateServiceProvider(Tenant tenant, IEnumerable<Assembly> assemblies) { var tenantServiceProvider = _rootProvider.CreateNestedProvider(services => { services.AddTransient<TenantMarkerService>(); services.AddSingleton(tenant); services.AddSingleton<ITenantContext, TenantContext>(); services.AddTransient<ITenantPipelineFactory, TenantPipelineFactory>(); foreach (var assembly in assemblies) { foreach (var registrationConvention in _registrationConventions) { registrationConvention.RegisterServices(assembly, services); } } //Eventbus should be last registration. services.AddEventBus(); }); return tenantServiceProvider; }
/// <summary> /// Creates a new instance of <see cref="SqlServerOptionsProvider"/>. /// </summary> /// <param name="tenant"></param> public SqlServerOptionsProvider(Tenant tenant) { _tenant = tenant; }
//<inheritdoc /> public ITenantContext LoadContext(Tenant tenant) { var tenantContext = _tenantContexts.GetOrAdd(tenant.TenantId, tenantId => _contextFactory.CreateContext(tenant)); return tenantContext; }