• .NET MVC 简单的插件式开发


    插件式开发的优势

    1.提高软件的复用度

    2.提高软件开发的并行性

    3.缩短软件的研发周期、节约研发成本,带给程序开发人员更多的灵活性,产品在软件发布以后还可以添加新的插件和完善已有的功能。

    4.方便软件的升级和维护。传统的应用程序因为采用单一的固定的模块,功能模块不易维护和替换,但是插件却可以动态的变更功能,对软件的升级和维护带来很大的帮助

    5.可以满足用户不断变化的需求,缩短项目交付周期,而这传统点体系机构很难满足和实现。

    6.提供了更多的开发可能性

    简单实现步骤

    1.新建一个空的MVC项目。要求必须包含:Controllers(控制器)、Models(ViewModel)、Content(样式表)文件夹。

    2.在项目根目录下新建一个自启动类,用于注册插件

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace DBI.SaaS.STaxDeclaration.Module
    {
        /// <summary>
        /// 小规模纳税人申报插件
        /// </summary>
        public class STaxDeclarationPlugin : DBI.SaaS.Base.SaaSPlugin
        {
        }
    }

    我这里是继承了SaaSPlugin类,不过

    .Net Framework 4.0后提供了PreApplicationStartMethodAttribute属性,提供对应用程序启动的扩展支持。

    https://msdn.microsoft.com/zh-cn/library/system.web.preapplicationstartmethodattribute.aspx 

    使用时,将PreApplicationStartMetod的声明写在自启动类的命名空间前。

    SaaSPlugin:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Web;
    
    namespace DBI.SaaS.Base
    {
        public abstract class SaaSPlugin : IPlugin
        {
            /// <summary>
            ///插件名称
            /// </summary>
            private string _pluginName;
    
            /// <summary>
            /// 当前插件的名称
            /// </summary>
            /// <value>The name of the plugin.</value>
            public string PluginName
            {
                get
                {
                    return _pluginName;
                }
            }
    
            /// <summary>
            /// 添加插件前执行方法
            /// </summary>
            protected virtual void BeforeInit() { }
    
            /// <summary>
            /// Initializes this instance.
            /// </summary>
            protected virtual void Init(){  }
    
            protected virtual void EndInit() { }
    
            public void Run()
            {
                this.BeforeInit();
                this._pluginName = this.GetType().Assembly.GetName().Name;
                this.Init(); 
                this.EndInit();
            }
        }
    }
    View Code

    SaaSPlugin下有插件名称为自启动类的属性,作为本插件的唯一标识。

    有插件初始化方法。

    我这里的初始化是去读xml文件,所以要添加xml文件里面内容

    3.配置XML

    <?xml version="1.0" encoding="utf-8" ?>
    <plugins>
      <plugin name="DBI.SaaS.Edu.Module.EduPlugin"  assembly="DBI.SaaS.Edu.Module" />
      <!--<plugin name="DBI.SaaS.ExtAPI.Module.ExtApiPlugin"  assembly="DBI.SaaS.ExtAPI.Module" />-->
      <plugin name="DBI.SaaS.STaxDeclaration.Module.STaxDeclarationPlugin"  assembly="DBI.SaaS.STaxDeclaration.Module" />
      <plugin name="DBI.SaaS.XSYAPI.Module.XSYAPIPlugin"  assembly="DBI.SaaS.XSYAPI.Module" />
      
    </plugins>

    4.设置后期生成事件命令

    在该MVC项目属性中的生成事件中,添加后期生成事件命令行:

    xcopy "$(ProjectDir)Views" "$(SolutionDir)DBI.SaaS.WebPlugins$(ProjectName)Views" /s/i/y 
    
    
    xcopy "$(ProjectDir)Modules" "$(SolutionDir)DBI.SaaS.WebPlugins$(ProjectName)Modules" /s/i/y 
    
    xcopy "$(ProjectDir)Content" "$(SolutionDir)DBI.SaaS.WebPlugins$(ProjectName)Content" /s/i/y 

    分别用于:拷贝视图文件夹到主Web项目、拷贝样式表文件夹到主Web项目、拷贝Modules文件夹到主Web项目。这样就能实现在插件编译通过后,自动将相应的插件文件复制到主Web项目的Plugins下,方便调试。

    5.主项目引用该项目,生成

    最终效果

  • 相关阅读:
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31
    知也atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31无涯 - I
  • 原文地址:https://www.cnblogs.com/xuwendong/p/7543079.html
Copyright © 2020-2023  润新知