沉静岁月,淡忘流年
1项目简介
Remember.Core
一个轻量的 Web 应用框架, 具有优雅、高效、简洁、富于表达力等优点。采用 前后端分离 设计,是崇尚开发效率的全栈框架
Remember.Core目前仅提供了插件框架,若你需要实现一个Web插件系统,或许 Remember.Core 是不错的参考,这也是本项目的目的,作为 插件系统实现的参考。
原项目地址: https://github.com/yiyungent/Remember.Core
作者博客: https://moeci.com/
https://moeci.com/Remember.Core
2框架功能
在线项目演示: 暂无
(插件列表)
(运行效果)
(插件配置)
(插件文档说明)
功能一览
3框架技术栈
(系统所用到的技术栈)
前端基于vue-element-admin,后端基于.NETCore3.1,RESTful和SemanticWebAPI 设计,采用UHub(IdentityServer4)完成认证授权。
配合使用Autofac依赖注入容器,
EFCore提供数据持久化ORM,
Serilog做日志集成,
Quartz.NET做任务调度。
核心的还是基于插件可拔插式的开发模式,有很好的借鉴意义。
4分层介绍
一个示例插件项目结构 如下图
GetUserInfoPlugin
类 继承 BasePlugin
或则你可以直接实现 IPlugin 可通过预先定义框架行为钩子,插件再实现接口,将插件行为加入框架,如实现 ITestPlugin 支持插件 构造器注入 框架预先注入的服务等
public class GetUserInfoPlugin : BasePlugin, ITestPlugin
{
private readonly IUserInfoService _userInfoService;
public GetUserInfoPlugin(IUserInfoService userInfoService)
{
this._userInfoService = userInfoService;
}
public string Say()
{
UserInfo userInfo = _userInfoService.FirstOrDefaultAsync(m => !m.IsDeleted).Result;
string rtn = $"用户名: {userInfo.UserName}, 创建时间: {userInfo.CreateTime.ToString()}";
return rtn;
}
public override (bool IsSuccess, string Message) AfterEnable()
{
Console.WriteLine($"{nameof(GetUserInfoPlugin)}: {nameof(AfterEnable)}");
return base.AfterEnable();
}
public override (bool IsSuccess, string Message) BeforeDisable()
{
Console.WriteLine($"{nameof(GetUserInfoPlugin)}: {nameof(BeforeDisable)}");
return base.BeforeDisable();
}
}
支持 动态扩展 WebAPI,和普通WebAPI 项目相同,直接创建 Controller 即可
[Route("api/plugins/[controller]")]
[ApiController]
public class UserHelloController : ControllerBase
{
private readonly IUserInfoService _userInfoService;
public UserHelloController(IUserInfoService userInfoService)
{
this._userInfoService = userInfoService;
}
public ActionResult Get()
{
UserInfo userInfo = _userInfoService.FirstOrDefaultAsync(m => !m.IsDeleted).Result;
SettingsModel settingsModel = PluginSettingsModelFactory.Create<SettingsModel>("GetUserInfo");
string rtn = $"用户名: {userInfo.UserName}, 创建时间: {userInfo.CreateTime.ToString()}, Hello: {settingsModel.Hello}";
return Ok(rtn);
}
}
右键选择插件项目,点击发布(Publish),再将发布后的插件文件夹打包为 GetUserInfo.zip 即可 压缩包名可随意,框架将以 info.json 中 PluginId 作为插件标识 打包后的插件,即可通过 上传本地插件 载入框架 GetUserInfo.csproj 参考
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Framework\Libraries\Domain\Domain.csproj" />
<ProjectReference Include="..\..\src\Framework\Libraries\Framework\Framework.csproj" />
<ProjectReference Include="..\..\src\Framework\Libraries\PluginCore\PluginCore.csproj" />
<ProjectReference Include="..\..\src\Framework\Libraries\Services\Services.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="info.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="README.md">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="settings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
本框架主要提供了插件框架的简单实现样板,如果你想要实现一个Web插件框架,你可以参考本框架的代码。
本文分享自 NetCore 从壹开始 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!