适用:适用于中小型企业快速搭建信息发布平台以及作为二次开发平台。
环境:跨平台(Windows/Linux/MacOS) + .net core(3.1) MVC + SqlServer/MySql/Sqlite。
--------------------------------------------------------------------
SinGooCMS的.net core版本,基于.net core 3.1开发
.NET Core 具有以下特性:
跨平台:可在 Windows、macOS 和 Linux 操作系统上运行。
开放源代码: .NET Core 框架是开放源代码,使用 MIT 和 Apache 2 许可证。 .NET Core 是一个 .NET Foundation 项目。
现代:它实现了异步编程、使用结构的无复制模式和容器的资源调控等现代范例。
性能: 通过各种功能(如硬件内部函数、分层编译和 Span<T>)来提供高性能。
跨环境一致:在多个操作系统和体系结构(包括 x64、x86 和 ARM)上以相同的行为运行代码。
命令行工具: 包括可用于本地开发和持续集成的易于使用的命令行工具。
部署灵活: 可以在应用中包含 .NET Core 或并行安装它(用户或系统范围安装)。 可搭配 Docker 容器使用。
具体介绍可参考:https://docs.microsoft.com/zh-cn/dotnet/core/about
系统架构
采用DDD(领域驱动)开发思想,核心业务模块+周边辅助模块。
SinGooCMS.Domain 核心业务层
SinGooCMS.Infrastructure 基础实施层
SinGooCMS.Application 应用层
SinGooCMS.WebUI 界面UI层
SinGooCMS.Passports 统一认证中心
数据模型
EFCore + Ado.net
在appsettings.json中配置连接字符串
"ConnectionStrings": {
"ProviderName": "Sqlite",
//"SQLConnSTR": "server=(local);database=SinGooCMS-v1.6;uid=sa;pwd=123;Application Name=SinGooCMS;pooling=true;min pool size=5;max pool size=512;connect timeout = 20;",
//"SQLConnSTR": "server=localhost;database=SinGooCMSv16;uid=root;pwd=123456;SslMode=None;",
"SQLConnSTR": "Data Source=db/singootop.db",
//"DistributedCacheConnStr": "server=(local);database=SinGooCMS-v1.6;uid=sa;pwd=123;Application Name=SinGooCMS;pooling=true;min pool size=5;max pool size=512;connect timeout = 20;",
"RedisExchangeHosts": "127.0.0.1:6379,allowadmin=true"
}
系统根据"ProviderName",调用不同的数据库引擎,目前支持SqlServer,MySql,Sqlite。
SinGooCMS.Ado作为EFCore的辅助功能使用,弥补EFCore不方便写原生SQL的不足。
SinGooCMS.Ado可以在NuGet包管理器中下载,开源地址是:https://github.com/SinGooCMS/SinGooCMSAdo
注入容器-DI
使用Autofac做为注入容器,除在普通类中注入实例,也可以在控制器(Controller)和视图(Views)中注入实例。
注入可以是构造器注入和属性注入
//构造器注入:
public class PassportsController : Controller
{
private readonly IUserRepository userRepository;
private readonly IUserService userService;
private readonly IIdentityServerInteractionService interaction;
public PassportsController(
IUserRepository _userRepository,
IUserService _userService,
IIdentityServerInteractionService _interaction
)
{
this.userRepository = _userRepository;
this.userService = _userService;
this.interaction = _interaction;
}
//...
}
//属性注入:
public class CMSPageBase : Controller
{
public ICMSContext Context { get; set; }
public ICacheStore CacheStore { get; set; }
public ILogService LogService { get; set; }
//...
}
//视图注入:
@inject SinGooCMS.Domain.Interface.ICMSContent cms;
@inject SinGooCMS.Domain.Interface.ICMSContext context;
@inject SinGooCMS.Domain.Interface.IUser user;
@using SinGooCMS.MVCBase.Extension;
<!DOCTYPE html>
<html>
...
缓存
包括系统缓存与页面缓存
1)系统缓存
系统会缓存常用的数据以提升效率,比如栏目、基础配置、字典等。
系统缓存可以使用内存缓存和Redis缓存,具体在appsettings.json中配置。
//是否启用缓存
"EnableCache": "True",
//缓存类型 LocalCache 、 RedisCache
"CacheType": "LocalCache",
//缓存有效时长(秒)
"ExpireSeconds": 3600,
//Redis自定义Key前缀
"RedisKey": "",
//Redis缓存使用的DbNum
"CacheDbNum": "1",
2)页面缓存
系统提供了栏目、文章的缓存机制,启用后缓存文件将保存到目录:/include/htmlcache/。
模板
Razor模板语法介绍:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?view=aspnetcore-3.1
模板存放路径是:/Views/Templates/,此目录下可以有多个模板文件夹,系统根据设置使用其中某个模板。
模板不会被编译,通过在线编辑模板,实时改变前端显示效果。
第三方
系统集成了邮件发送、短信发送、阿里云云存储、第三方授权登录等功能。
系统集成了盛派微信组件Senparc.Weixin,提供了简单的信息处理和菜单管理。
浏览方式
默认的MVC路由,如/article/about。
伪静态,如/article/about.html。
统一认证
集成IdentityServer4,默认情况下是使用本站自有的会员系统,如果是网站集群,需要统一认证,需要配置认证中心站点,并配置客户端。
在认证中心 /Config/Clients.json 配置客户端
[
{
"ClientID": "cmssite",
"ClientName": "SinGooCMS内容管理系统",
"LoginUrl": "http://localhost:5002/signin-oidc",
"LogoutUrl": "http://localhost:5002/signout-callback-oidc"
},
{
"ClientID": "client2",
"ClientName": "客户端2",
"LoginUrl": "http://localhost:5003/signin-oidc",
"LogoutUrl": "http://localhost:5003/signout-callback-oidc"
}
]
然后在客户端appsettings.json文件中设置
//是否统一(单点)登录
"IsUnificationLogin": "True",
//单点登录客户端ID
"OAuthClientID": "cmssite",
//单点登录客户端名称
"OAuthClientName": "singoocms内容管理系统",
//单点登录统一登录地址
"OAuthUrl": "http://localhost:5000"
--------------------------------------------------------------------
案例
--------------------------------------------------------------------
演示demo:
后台管理:
http://demo.singoo.top/platform/login.html
demo
demo888