博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BCVP开发者说第4期:Remember.Core
阅读量:4035 次
发布时间:2019-05-24

本文共 3572 字,大约阅读时间需要 11 分钟。

沉静岁月,淡忘流年

1

项目简介

Remember.Core

   

一个轻量的 Web 应用框架, 具有优雅、高效、简洁、富于表达力等优点。采用 前后端分离 设计,是崇尚开发效率的全栈框架

  • 简洁友好 - 统一的设计规范,精心打磨的操作界面回应你的期待。

  • 易扩展 - 一套完整的插件机制,以 约定优于配置 为中心的项目结构,无论是对开发者还是使用者都如此友好。

Remember.Core目前仅提供了插件框架,若你需要实现一个Web插件系统,或许 Remember.Core 是不错的参考,这也是本项目的目的,作为 插件系统实现的参考。

 

原项目地址:

https://github.com/yiyungent/Remember.Core

作者博客:

https://moeci.com/

https://moeci.com/Remember.Core

 

2

框架功能

 

在线项目演示:

暂无

 

(插件列表)

(运行效果)

(插件配置)

(插件文档说明)

功能一览

  • 上传本地插件 - 热插拔:

    无论是加载,卸载都无需重启你的站点

  • 放置钩子 - 让插件行为加入框架

  • 全程依赖注入 - 你可在插件生命周期获取你注入的任何服务

  • 以约定优于配置为中心的项目结构 - 只需关注你的业务

  • 一插件一LoadContext - 插件间彼此隔离

  • Framework 域共享机制 - 免去重复加载

  • 简单易用 - PluginFinder、PluginManager 或许你仅仅需要它们

  • 一套完整的 插件生命周期 - 在需要时做你想做

  • 动态扩展 WebAPI - 每个插件都是一个 WebAPI

  • 完整插件的机制 - 从上传,设置,禁用再到卸载,一次打通

  • 多数据库切换 - 让EF做它该做的事

  • 轻量的插件框架 - 易用不过如此

3

框架技术栈

(系统所用到的技术栈)

前端基于vue-element-admin,后端基于.NETCore3.1,RESTful和SemanticWebAPI 设计,采用UHub(IdentityServer4)完成认证授权。

配合使用Autofac依赖注入容器,

EFCore提供数据持久化ORM,

Serilog做日志集成,

Quartz.NET做任务调度。

核心的还是基于插件可拔插式的开发模式,有很好的借鉴意义。

4

分层介绍

1. 引入插件框架dll(PluginCore 必须,其它根据需要)

一个示例插件项目结构 如下图

2. 添加 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();    }}

3. 插件其他配置

支持 动态扩展 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
("GetUserInfo"); string rtn = $"用户名: {userInfo.UserName}, 创建时间: {userInfo.CreateTime.ToString()}, Hello: {settingsModel.Hello}"; return Ok(rtn); }}

4. 插件发布打包

右键选择插件项目,点击发布(Publish),再将发布后的插件文件夹打包为 GetUserInfo.zip 即可     压缩包名可随意,框架将以 info.json 中 PluginId 作为插件标识     打包后的插件,即可通过 上传本地插件 载入框架    GetUserInfo.csproj 参考

netcoreapp3.1
Always
Always
Always

本框架主要提供了插件框架的简单实现样板,如果你想要实现一个Web插件框架,你可以参考本框架的代码。

基于Net/Core,快速搭建 API & SPA 及微服务应用组织

BASE NETCORE (VUE) PROJECT TEAM

每一个.NET开发者都可以通过自己的开源项目(最好可以配套简单发表些文章)在这里进行分享,BCVP开发者组织的意义就是激发和挖掘更多的作品,可能偏基础,但是都会有价值。目的就是希望:每个人能将从社区学到的知识,进行自己消化和总结,浓缩成一个个独立的项目,接着投入到社区,最后让更多的初学者去了解、去学习、去思想碰撞,从而达到学习来源于社区,最后反哺于社区的良好循环目的,我们都是学生,也都是下一批初学者的老师,这才应该是一个社区正向推动的方法。

地址:

https://github.com/BaseCoreVueProject

可以在Home仓库里,查看具体的流程说明,只要你愿意分享,就来吧。

加入我们

转载地址:http://plkdi.baihongyu.com/

你可能感兴趣的文章
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>
Brackets安装及常用插件安装
查看>>
Centos 7(Linux)环境下安装PHP(编译添加)相应动态扩展模块so(以openssl.so为例)
查看>>
fastcgi_param 详解
查看>>
Nginx配置文件(nginx.conf)配置详解
查看>>
标记一下
查看>>
一个ahk小函数, 实现版本号的比较
查看>>
IP报文格式学习笔记
查看>>
autohotkey快捷键显示隐藏文件和文件扩展名
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>
自然计算时间复杂度杂谈
查看>>