An SaaS/Multi-Tenants/Multi-Modules AspNetCore Framework. Like OrchardCore, but it's lightweight.
多租户/多模块轻量级AspNetCore框架
将整个系统划分为各个独立的模块(解藕),模块之间通过依赖实现关联。
参考OrchardCore源码,定义IStartup模块全局接口:
interface IStartup
{
int Order { get; }
void ConfigureServices(IServiceCollection services);
void Configure(IApplicationBuilder app, IRouteBuilder routes, IServiceProvider services);
}
每个模块定义入口类 [Startup] 继承自 IStartup,实现模块的DI注入、启用配置、应用中间件等。
框架内实现了多个内部模块,如:Acesoft.Logger,Acesoft.Config,Acesoft.Cache,Acesoft.Web。
其中 [Acesoft.Web] 是整个应用的启用入口,内部会自动加载内部模块(引用的dll文件)和外部模块(非引用模块)
基于hostname和port进行区分,多个Tenants运行于同一AppDomain内,共享Mvc和Pages。
每个Tenant适配不同的数据库,实现库级安全隔离。同时提供一个Tenants管理库,用于SaaS创建和管理。
每个Tenant包含多个外部Modules,Modules可以相互依赖,依据Modules可以组合出不同的客户服务。
Module也可以对应于Href中的segments。每个模块也可以单独定义数据库。
Tenant通过注册中间件以启用,可以配置默认Tenant或unresolvedRedirect。
下为多个Tenants的配置文件 tenants.config.json:
{
"defaultTenant": "default",
"unresolvedRedirect": "http://www.miniplat.com",
"RedirectPermanent": false,
"tenants": [
{
"name": "saas",
"hostnames": [
"localhost:5000",
"localhost:5001"
],
"modules": [
"admin",
"platform"
],
"theme": "default"
}
]
}
创建一个AspNetCore应用,引用Acesoft.Web,然后配置Startup文件:
public void ConfigureServices(IServiceCollection services)
{
services.AddMultitenancy();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
// Use SaaS middleware
app.UseMultitenancy();
}
现已更新为NetCore3.1,长期更新版本 AcePlat