基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET - 插件接口IModule

简介:   我们知道,要基于平台(容器)+插件的这种模式进行开发,我们必须定义一组契约,用于约束模块插件开发,也就是说,模块插件需要遵守一定的标准进行开发,才能正常被容器调用,这就是IModule所定义的内容。

  我们知道,要基于平台(容器)+插件的这种模式进行开发,我们必须定义一组契约,用于约束模块插件开发,也就是说,模块插件需要遵守一定的标准进行开发,才能正常被容器调用,这就是IModule所定义的内容。

IModule/// <summary>
/// 定义EAS模块插件的基本规范。
/// </summary>
public interface IModule: IObject
{
    /// <summary>
    /// 获取模块的名称。
    /// </summary>
    string ModuleName { get; }

    /// <summary>
    /// 获取模块的说明信息。
    /// </summary>
    string ModuleDescription { get; }

    /// <summary>
    /// 获取模块的分组信息。
    /// </summary>
    string Group { get; }

    /// <summary>
    /// 当功能模块成功启动后触发。
    /// </summary>
    event System.EventHandler Started;

    /// <summary>
    /// 在关闭模块之前触发该事件。
    /// </summary>
    event System.EventHandler Exited;

    /// <summary>
    /// 关闭当前模块,该方法是用于关闭运行在Shell中的程序模块。
    /// </summary>
    void Close();

    /// <summary>
    /// 运行当前模块,该方法是是用于由运行时Shell 载入模块,实现模块调用。
    /// </summary>
    /// <param name="parameters">模块运行的初始参数列表。</param>
    void Run(params object[] parameters);	
}

  IModule定义了模块名称及模块被调用的方法Run(),以及被平台加载和关闭的事件,从定义可我们看到IModule继续自IObject接口。

IObject/// <summary>
/// 定义系统对象的基本规范。
/// </summary>
public interface IObject : IPrivilegObject, System.IDisposable
{
    /// <summary>
    /// 获取对象的说明信息。
    /// </summary>
    string Description { get;}

    /// <summary>
    /// 获取对象的图标。
    /// </summary>
    System.Drawing.Image Icon { get;}
}

  这里为什么会出现IObject接口,这里提到一个说明,就在是EAS.NET平台设计之初,我们引入了一个想法,我们视程序中的模块、ORM对象、所定义的外部设备等统称为对象,并对这些对象进行管理,基于这于一个想法,我们引入了一个对象的概念,但是在实际应用中,对象这一层次的理解慢慢谈化,也许在将来的设计中,取消这个接口。

  IObject接口显式的定义了对象的说明性信息对象描述和图标,对于IModule接口及IObject接口,都继承自一个重要的接口IPrivilegObject。

IPrivilegObject/// <summary>
/// 系统权限对象的基本规范。
/// </summary>
public interface IPrivilegObject
{   
    /// <summary>
    /// 获取权限对象的全局唯一标识符(GUID)。
    /// </summary>
    System.Guid Guid { get; }

    /// <summary>
    /// 获取权限对象的类型信息,即对象的类名称。
    /// </summary>
    string Type { get; }

    /// <summary>
    /// 获取对象权限对象名称。
    /// </summary>
    string Name { get;}

    /// <summary>
    /// 获取对象的版本信息。
    /// </summary>
    string Version { get;}

    /// <summary>
    /// 获取对象的程序集信息。
    /// </summary>
    string Assembly { get;}

    /// <summary>
    /// 获取对象的开发者信息。
    /// </summary>
    string Developer { get;}
}

      IPrivilegObject为权限对象接品,平台(运行容器)可以使用其鉴权系统对其实现权限检查,关于系统的权限设计我会在后面专门进行说明。

      在模块插件的接口中,我们看到了很多关于模块自描述的信息,比如名称、说明、类型、程序集、版本号以及开发者等等,定义这些信息的目的在于对模块的自描述,资源管理平台在安装模块的过程中读取这些元数据并存储在数据库,以方便对系统中插件的管理。

       模块元数据中定义的程序集、类型信息用于容器反射调用插件,这也是平台+插件所依赖的关键技术。

       在具体的应用开发中,针对WinFrom和WebForm的不同应用对IModule接口进行了某些扩展和基础实现,用于在应用开发过程的特定应用,以加快开发速度。

   在下一篇文章中,我将会对调用模块插件的平台,也就是运行容器做介绍。

 

       链接:AgileEAS.NET应用开发平台介绍

目录
相关文章
|
27天前
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
28 0
|
1月前
深入.net平台的分层开发
深入.net平台的分层开发
52 0
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的云LIS系统平台源码
结合当今各检验科管理及实验室规模的不同状况,充分吸收当今IT科技的最新成就,开发出以高度产品化、功能强大、极易实施操作、并不断升级换代为主要特点的LIS系统。彻底解决检验科的信息孤岛,全面实现全院信息互通互联、高度共享,并为检验科的规范化管理提供了有力工具。
41 0
|
4月前
|
XML API 数据库
七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
|
4月前
|
JSON JavaScript 前端开发
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的区域云LIS系统平台源码
asp.net基于WEB层面的区域云LIS系统平台源码
49 1
|
4月前
|
开发框架 小程序 数据可视化
基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop
基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop
|
5月前
|
存储 前端开发 程序员
一款基于.Net开发、开源、支持多平台云存储文件管理器
一款基于.Net开发、开源、支持多平台云存储文件管理器
42 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0