SimpleAdmin手摸手教学之:插件管理

一、前言

在2.0的架构设计中,引入了插件的概念,目的就是为了解决代码臃肿问题,随着系统功能越来越多,System层的代码也越来越多,之前是以文件夹的方式区分功能模块,这样的话代码就过于集中,想找到某一个功能模块的代码就要翻好几个文件夹,不利于以后的开发和维护。所以在新的架构中,我将部分功能模块通过插件的方式提取出来,封装成类库形式的插件,这样System层如果需要哪个功能,就直接引用该功能模块的插件,我们调试代码中遇到问题也直接可以去对应功能模块的插件项目中查看代码并调试,非常方便。

二、插件说明

2.1核心插件

2.1.1 SimpleAdmin.Plugin.Core

插件核心,被其他插件所引用,类似SimplAdmin.Core层,存放一些公共的特性,常量,枚举,接口等。

SimpleAdmin手摸手教学之:插件管理

2.1.2 SimpleAdmin.Plugin.SqlSugar

SqlSugar插件,集成了SqlSugar的单例模式,数据库实体和一些常量我也移了过来,之前是放在核心层,但是我觉得提取出来的话后面找数据库相关的功能和配置就直接到SqlSugar插件找,非常方便。

SimpleAdmin手摸手教学之:插件管理

2.1.3 SimpleAdmin.Plugin.CodeFirst

CodeFirst数据迁移插件,如果需要数据库初始化和种子数据的生成,则引用该插件。

SimpleAdmin手摸手教学之:插件管理

2.1.4 SimpleAdmin.Plugin.Cache

缓存插件,支持MemeryCache和Redis二选一,默认使用MemeryCache。

SimpleAdmin手摸手教学之:插件管理

2.1.5 SimpleAdmin.Plugin.Aop

Aop插件,如果需要Aop功能,则可以使用该插件。

SimpleAdmin手摸手教学之:插件管理

2.2系统模块

2.2.1 SimpleAdmin.Plugin.Mqtt

Mqtt插件,集成mqtt客户端功能,如果需要使用mqtt功能则可以引用该插件,支持和SignalR插件并存。

SimpleAdmin手摸手教学之:插件管理

2.2.2 SimpleAdmin.Plugin.SignalR

SignalR插件,主要用于及时通讯和消息通知,系统默认消息通知使用的是Signalr,当然也可以切换成mqtt,可以和mqtt插件并存。

SimpleAdmin手摸手教学之:插件管理

2.2.3 SimpleAdmin.Plugin.ImportExport  

导入导出插件,继承了数据导入导出功能,使用的Magicodes.IE.Excel实现的

SimpleAdmin手摸手教学之:插件管理

2.2.4 SimpleAdmin.Plugin.Gen

代码生成插件,集成了代码生成器功能,跟其他插件不同的是该插件引用System层而不是被System层引用。

SimpleAdmin手摸手教学之:插件管理

2.2.5 SimpleAdmin.Plugin.Batch

批量编辑插件,集成了批量编辑功能。

SimpleAdmin手摸手教学之:插件管理

三、如何新建插件

新建类库项目,输入项目名称和项目位置,命名规则为SimpleAdmin.Plugin.XXX,注意项目位置要在SimpleAdmin.Plugin文件夹。

SimpleAdmin手摸手教学之:插件管理

双击新建的插件,修改PropertyGroup里得内容,这里的DocumentationFile改成自己的插件名称。

	<PropertyGroup>
		<TargetFrameworks>net7.0;net6.0</TargetFrameworks>
		<NoWarn>1701;1702;8616;1591;8618;8629;8602;8603;8604;8625;8765</NoWarn>
		<DocumentationFile>SimpleAdmin.Plugin.Test.xml</DocumentationFile>
		<ImplicitUsings>enable</ImplicitUsings>
		<Nullable>enable</Nullable>
	</PropertyGroup>

vs应该会提示重新加载项目,选择重新加载项目,并引用SimpleAdmin.Plugin.Core插件。

SimpleAdmin手摸手教学之:插件管理

创建GlobalUsing.cs文件,用于全局引用。

global using Furion;
global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.Extensions.DependencyInjection;
global using SimpleAdmin.Plugin.Core;

新建startup.cs类,在 Furion 框架中,提供了更为灵活的 Startup 类配置方式,无需在 Web 启用层 中配置,可将配置放到任何项目层。详情可以查看Furion文档 https://furion.baiqian.ltd/docs/appstartup

/// <summary>
/// AppStartup启动类
/// </summary>
public class Startup : AppStartup
{
    /// <summary>
    /// ConfigureServices中不能解析服务,比如App.GetService(),尤其是不能在ConfigureServices中获取诸如缓存等数据进行初始化,应该在Configure中进行
    /// 服务都还没初始化完成,会导致内存中存在多份 IOC 容器!!
    /// 正确应该在 Configure 中,这个时候服务(IServiceCollection 已经完成 BuildServiceProvider() 操作了
    /// </summary>
    /// <param name="services"></param>
    public void ConfigureServices(IServiceCollection services)
    {
         Console.WriteLine("注册Test插件");
         //serviec.AddXXX();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    }
}

 通过startup的方式,你只要引用了插件,则系统启动之后会自动调用里面的ConfigureServicesConfigure。如果你想你的插件可以通过配置文件选择启用或者不启用,那么你应该创建一个Component类,可以参考MQTT组件和Furion文档https://furion.baiqian.ltd/docs/component

namespace SimpleAdmin.Plugin.Test;

/// <summary>
///  Test组件
/// </summary>
public sealed class TestComponent : IServiceComponent
{

    /// <summary>
    /// ConfigureServices中不能解析服务,比如App.GetService(),尤其是不能在ConfigureServices中获取诸如缓存等数据进行初始化,应该在Configure中进行
    /// 服务都还没初始化完成,会导致内存中存在多份 IOC 容器!!
    /// 正确应该在 Configure 中,这个时候服务(IServiceCollection 已经完成 BuildServiceProvider() 操作了
    /// </summary>
    /// <param name="services"></param>
    public void Load(IServiceCollection services, ComponentContext componentContext)
    {
        Console.WriteLine("注册Test插件");
    }
}


/// <summary>
/// Test组件
/// 模拟 Configure
/// </summary>
public sealed class TestApplicationComponent : IApplicationComponent
{
    public void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext)
    {

    }
}

System层引用新建的插件,如果你的插件是像代码生成插件一样引用了System层,则要Web.Core层引用才行。

SimpleAdmin手摸手教学之:插件管理

启动项目,可以看到插件启动了,剩下的就是自己写插件功能了。

SimpleAdmin手摸手教学之:插件管理

原文链接:https://www.cnblogs.com/huguodong/p/17294128.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SimpleAdmin手摸手教学之:插件管理 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 记一次 Windows10 内存压缩模块 崩溃分析

    一:背景 1. 讲故事 在给各位朋友免费分析 .NET程序 各种故障的同时,往往也会收到各种其他类型的dump,比如:Windows 崩溃,C++ 崩溃,Mono 崩溃,真的是啥都有,由于基础知识的相对缺乏,分析起来并不是那么的顺利,今天就聊一个 Windows 崩溃的内核dump 吧,这个 dump 是前几天有位朋友给到我的,让我帮忙看一下,有了dump之…

    C# 2023年4月27日
    00
  • c#使用filesystemwatcher实时监控文件目录的添加和删除

    C#使用FileSystemWatcher实时监控文件目录的添加和删除 FileSystemWatcher是C#中用于监控文件系统更改的类。它可以监视指定目录中的文件和子目录的创建、更改、重命名和删除等操作,并在这些操作发生时引发事件。在本文中,我们将介绍如何使用FileSystemWatcher实时监控文件目录的添加和删除。 步骤一:创建FileSyste…

    C# 2023年5月15日
    00
  • C#利用反射实现多数据库访问

    C#利用反射实现多数据库访问的完整攻略指的是使用C#编程语言,通过反射技术实现对多种不同的数据库的访问操作。在开发过程中,我们可以针对不同的数据库类型编写不同的代码。下面是整个过程的具体步骤: 添加必要的引用和命名空间:在使用反射进行数据库访问操作之前,我们需要在引用中添加 System.Reflection 和 System.Data 命名空间。添加这些命…

    C# 2023年6月1日
    00
  • C#Web应用程序入门经典学习笔记之一

    C#Web应用程序入门经典学习笔记之一学习攻略 C#Web应用程序入门经典学习笔记之一是一本入门级别的C#网络开发学习笔记,主要介绍了通过ASP.NET Core Web应用程序搭建Web应用程序的基础知识和应用。本学习攻略将介绍如何学习这本书并深入理解其内容。 一、先了解一下ASP.NET Core Web应用程序 在开始学习这本书之前,我们需要先简单了解…

    C# 2023年6月1日
    00
  • C#不登录电脑启动程序

    下面我详细讲解一下“C#不登录电脑启动程序”的完整攻略。 1. 如何实现不登录电脑启动程序 实现不登录电脑启动程序的主要步骤是在注册表中添加一个启动项,具体步骤如下: 创建一个Windows应用程序项目; 在Program.cs的Main方法中添加以下代码: csharp RegistryKey run = Registry.CurrentUser.Open…

    C# 2023年5月15日
    00
  • C#集合Collections购物车Shopping Cart(实例讲解)

    C#集合Collections购物车Shopping Cart(实例讲解) 这篇文章将向您介绍如何使用C#集合实现购物车功能。购物车是电商网站中非常常见的功能之一,它允许用户将他们感兴趣的商品加入到购物车中,随时查看购物车中的商品数量和总价等信息,最终下单付款。 实现思路 为了实现购物车功能,我们需要以下几个步骤: 在页面展示商品列表,并为每个商品提供一个“…

    C# 2023年6月7日
    00
  • Mysql动态更新数据库脚本的示例讲解

    下面为您详细讲解“Mysql动态更新数据库脚本的示例讲解”。 1. 什么是动态更新数据库脚本? 动态更新数据库脚本是指根据实际需求的变化,随时修改已经存在的数据库脚本。这种方式比直接在数据库中手动添加表格和字段要灵活方便得多。 2. Mysql动态更新数据库脚本的实现方法 MySQL的动态更新数据库脚本主要是使用ALTER后续跟着的语句操作。比如: ALTE…

    C# 2023年6月1日
    00
  • 在C#中使用MSMQ的方法

    在C#中使用MSMQ是一种消息传递机制,用于在应用程序之间传递消息。MSMQ提供了可靠的消息传递,即使在网络故障或应用程序崩溃的情况下也能保证消息的传递。本文将提供详细的“在C#中使用MSMQ的方法”的完整攻略,包括什么是MSMQ、如何使用MSMQ以及两个示例。 什么是MSMQ? MSMQ是Microsoft Message Queuing的缩写,是一种消息…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部