Exemplo n.º 1
1
        //<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;
                }
            }
        }
Exemplo n.º 2
0
 //<inheritdoc />
 public void UnloadContext(Tenant tenant)
 {
     ITenantContext context;
     if (_tenantContexts.TryRemove(tenant.TenantId, out context))
     {
         
     }
 }
Exemplo n.º 3
0
 /// <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>();
 }
Exemplo n.º 4
0
        /// <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();
        }
Exemplo n.º 5
0
        //<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;
        }
Exemplo n.º 6
0
 /// <summary>
 /// Creates a new instance of <see cref="SqlServerOptionsProvider"/>.
 /// </summary>
 /// <param name="tenant"></param>
 public SqlServerOptionsProvider(Tenant tenant)
 {
     _tenant = tenant;
 }
Exemplo n.º 7
0
 //<inheritdoc />
 public ITenantContext LoadContext(Tenant tenant)
 {
     var tenantContext = _tenantContexts.GetOrAdd(tenant.TenantId,
         tenantId => _contextFactory.CreateContext(tenant));
     return tenantContext;
 }