前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BCVP开发者说第4期:Remember.Core

BCVP开发者说第4期:Remember.Core

作者头像
老张的哲学
发布2022-04-11 16:19:54
4800
发布2022-04-11 16:19:54
举报
文章被收录于专栏:NetCore 从壹开始

沉静岁月,淡忘流年

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 支持插件 构造器注入 框架预先注入的服务等

代码语言:javascript
复制
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 即可

代码语言:javascript
复制
[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);
    }
}
4. 插件发布打包

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

代码语言:javascript
复制
<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插件框架,你可以参考本框架的代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引入插件框架dll(PluginCore 必须,其它根据需要)
  • 2. 添加 GetUserInfoPlugin 类 继承 BasePlugin
  • 3. 插件其他配置
  • 4. 插件发布打包
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档