首页 > 其他分享 >硬件管理平台-硬件网关-插件模块-集成(上)

硬件管理平台-硬件网关-插件模块-集成(上)

时间:2023-08-12 17:48:55浏览次数:48  
标签:IniSetting iniSetting 插件 string 网关 硬件 Singleton public

硬件管理平台-硬件网关-插件模块-集成(上)

本章内容

本章主要是将插件项目(HardwareGatewayPlugin)集成到HardwareGatewayWebApi项目中。

操作

创建单例模式类

由于HardwareGatewayWebApi项目是WebApi项目,可能后续还会有其他controller加入进来,因此我们的插件模块只针对HardwareGatewayController这个controller。

在该controller中我们创建单例类

internal sealed class HGSingleton
{
    private HGSingleton() { }
    private static volatile HardwareService _Singleton = null;
    private static object syncRoot = new object();
    internal static HardwareClient Instance()
    {
        if (_Singleton == null)
        {
            lock (syncRoot)
            {
                if (_Singleton == null)
                {
                    _Singleton = new HardwareClient();
                    _Singleton.Initiation();
                }
            }
        }
        return _Singleton;
    }
    internal static void Close()
    {
        _Singleton.Close();
    }
}

其中HardwareService类为操作HardwareGatewayPlugin项目的核心类。

HardwareService

硬件服务主要实现了controller中的接口类,并通过调用插件项目的load进行声明,然后通过触发相关的Function功能进行操作。

该服务主要功能:

  1. 初始化ini配置文件
  2. 调用插件项目的load方法,初始化反射类的实例

注:目前只能实现获取实例,后续调用模块及调度任务请参见后续章节

初始化ini

HardwareLibrary中创建IniSetting类,并根据项目情况设置相关配置文件变量。

下面给出部分配置信息变量

public class IniSetting
{
    /// <summary>
    /// 上位机系统IP
    /// </summary>
    public string Ip { get; set; }
    /// <summary>
    /// 智能库房系统端口
    /// </summary>
    public string Port { get; set; }
    /// <summary>
    /// 公共部分
    /// </summary>
    public string DefaultURL { get; set; }
    /// <summary>
    /// 默认url
    /// </summary>
    public string MethodURL { get; set; }
    /// <summary>
    /// 网关主键
    /// </summary>
    public string GatewayId { get; set; }
    /// <summary>
    /// 日志级别  
    /// RELEASE  只报错误信息
    /// DEBUG    调试模式 info和error信息
    /// </summary>
    public String LoggerLevel { get; set; } = "RELEASE";
    public static IniSetting getIniSetting() {
            IniSetting iniSetting = new IniSetting();
            IniOpt iniOpt = new IniOpt();
            iniSetting.Ip = iniOpt.ReadString("SETTING", "IP", "");
            iniSetting.Port = iniOpt.ReadString("SETTING", "PORT", "");
            iniSetting.DefaultURL = iniOpt.ReadString("SETTING", "DEFAULTURL", "");
            iniSetting.MethodURL = iniOpt.ReadString("SETTING", "METHODURL", "");
            return iniSetting;
        }
}

在Initiation方法中添加配置文件的方法InitSetting,该方法代码如下(罗列了部分变量)

 iniSetting = IniSetting.getIniSetting();

HardwareAbstract.cs中添加对配置文件的操作:

  1. 添加一个IniSetting的变量声明
  2. 在构造函数中给该变量赋值IniSetting.getIniSetting();

加载插件项目

在Initiation方法中添加配置文件的方法RefreshHardware方法

/// <summary>
/// 重新加载dll
/// </summary>
/// <returns></returns>
public AjaxResult RefreshHardware()
{
    DebugLog("重新加载dll");
    //清除之前的加载文件夹
    AppDomain.CurrentDomain.ClearPrivatePath();
    try
    {
        AssemblyControl assembly = new AssemblyControl();

        //引用文件夹中的dll
        string _add1Folder = string.Join(";", Directory.GetDirectories(assembly.PluginsFolder)).Replace(GlobalVar.LocalPath + "\\", "");
        string _add2Folder = string.Join(";", Directory.GetDirectories(assembly.RuntimeFolder)).Replace(GlobalVar.LocalPath + "\\", "");
        string privatePath = string.Format("{0};{1};{2}", assembly.IncludeFolder, _add1Folder, _add2Folder);
        AppDomain.CurrentDomain.AppendPrivatePath(privatePath);

        pluginManager.Load();
        return AjaxResult.success("成功");
    }
    catch (Exception ex)
    {
        _logerror.Error("重新加载dll", ex);
        return AjaxResult.error("错误", ex.Message);
    }
}

未完待续

很尴尬,少写了一个重要环节xml的相关配置,所以调用插件的初始化和调用功能只能放在完成xml的读取后才能进行。

标签:IniSetting,iniSetting,插件,string,网关,硬件,Singleton,public
From: https://www.cnblogs.com/wanghun315/p/17625149.html

相关文章

  • 硬件管理平台-硬件网关-插件模块-配置文件
    硬件管理平台-硬件网关-插件模块-配置文件上一篇仅仅将反射的基础模块进行了添加,不过还有很重要的一个配置文件还未进行添加,本文将讲述ini配置文件的添加方式何谓配置文件例如在HardwareGatewayService项目中读取App.config文件或log4net读取config.xml文件相同,本项目也需要添......
  • CCLINK转MODBUS-TCP网关cclink模块接线图
    大家好,今天我们要聊的是生产管理系统中的CCLINK和MODBUS-TCP协议,它们的不同使得数据互通比较困难,但捷米JM-CCLK-TCP网关的出现改变了这一切。1捷米JM-CCLK-TCP是一款自主研发的CCLINK从站功能的通讯网关,它的主要功能是将各种MODBUS-TCP设备接入到CCLINK总线中。网关连接到CCLINK......
  • 硬件管理平台-硬件网关-插件模块
    硬件管理平台-硬件网关-插件模块前言硬件产品库最终导出了硬件及其相关的依赖项,接下来就需要将依赖项放入到网关项目中,放入后需要做两个动作,第一个是通过硬件配置软件将压缩包解压并放入指定位置,然后进行该硬件的具体操作,另一个是硬件网关服务启动后,将特定目录下的硬件添加到网......
  • 【Java】智慧工地源码-支持私有化部署,SaaS模式+全套硬件设备
    智慧工地硬件设备包括:AI识别一体机、智能广播音响、标养箱、塔机黑匣子、升降机黑匣子、吊钩追踪控制设备、扬尘监测设备、喷淋设备。1.什么是AI危险源识别AI危险源识别是指基于智能视频分析技术,对视频图像信息进行自动分析识别,以实时监测危险区域的人员闯入、靠近等危险行为,从......
  • idea实用插件推荐(1)-Grep Console
    1.简介GrepConsole可以根据日志等级设置不同的颜色,效果如下:安装点击File->Settings在搜索框里输入GrepConsole,点击install即可安装使用安装成功后,在idea控制台右键点击ShowGrepConsoleStatisticsinConsole,即可设置对应日志级别的颜色公众号:1号程序员,关注回复B0......
  • 使用pip安装pycharm插件时,要使用管理员权限打开cmd安装
    1.问题安装到一半报错报错1报错22.解决解决1原文:https://blog.csdn.net/weixin_44899752/article/details/128372969下面是收集的一些国内的pip源:阿里云http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/豆瓣(douban)h......
  • 视频获取缩略图使用ffmpeg插件
      stringmp4URL=Server.MapPath("~/Upload/")+"33.mp4";stringOutURL=Server.MapPath("~/Upload/")+DateTime.Now.ToString("yyyyMMddHHmmssfff")+".png";ffmpeg(mp4URL,OutURL,3); ......
  • vscode插件推荐
    原文链接:https://www.cnblogs.com/MrFlySand/p/17623887.htmlmarkdown预览【推荐文章】VsCode更换MarkDown样式到底能有多好看?博客园VSCode客户端将本地markdown发布到博客园博客园博文列表搜索博文将本地文件关联到博客园博文拉取远程博文内容更新本地文件Mark......
  • 传奇架设服务端传奇GOM引擎不加载插件,写入了不加载的解决方法
    vsftpd(verysecureFTPdaemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在Linux实例上安装并配置vsftpd。前提条件已创建ECS实例并为实例分配了公网IP地址。背景信息FTP(FileTransferProtocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模......
  • 插件系列 vue2安装tailwindcss
    官方网址:https://www.tailwindcss.cn/docs/installation安装步骤:直接安装创建文件tailwindcss.cssmain.js全局引入文件tailwindcss.css在项目更目录下执行初始化配置文件指令第一步:直接安装npminstall-Dtailwindcss@npm:@tailwindcss/postcss7-compatpostcs......