插件式开发的优势

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();
}
}
}

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.Web\Plugins\$(ProjectName)\Views\" /s/i/y 

xcopy "$(ProjectDir)\Modules" "$(SolutionDir)\DBI.SaaS.Web\Plugins\$(ProjectName)\Modules\" /s/i/y 

xcopy "$(ProjectDir)\Content" "$(SolutionDir)\DBI.SaaS.Web\Plugins\$(ProjectName)\Content\" /s/i/y 

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

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

最终效果

.NET MVC 简单的插件式开发的更多相关文章

  1. MVC 插件式开发

    MVC 插件式开发 在开发一个OA系统是,我们可能遇到 A模块. B模块 .C模块,这也模块组成一个完整的系统,买给客服.现在又有一个客服要我们做一个OA系统,唉我们发现,跟上一个OA系统差不多,但没 ...

  2. 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用ApplicationPart动态加载控制器和视图

    标题:从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图 作者:Lamond Lu 地址:http://www.cnblogs ...

  3. 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板

    标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155 ...

  4. 零基础ASP.NET Core MVC插件式开发

    零基础ASP.NET Core MVC插件式开发 一个项目随着业务模块的不断增加,系统会越来越庞大.如果参与开发的人员越多,管理起来也难度也很大.面对这样的情况,首先想到的是模块化插件式开发,根据业务 ...

  5. 从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装

    标题:从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11260750. ...

  6. 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级

    标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...

  7. 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用

    标题:从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用. 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1171 ...

  8. 从零开始实现ASP.NET Core MVC的插件式开发(七) - 近期问题汇总及部分解决方案

    标题:从零开始实现ASP.NET Core MVC的插件式开发(七) - 问题汇总及部分解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/12 ...

  9. 从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案

    标题:从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun ...

随机推荐

  1. JavaWeb学习路线

    一.三大组件介绍 javaweb在开发中有三大组件分别提供不同的功能,这三大组件为servlet,filter,listener 1.servlet 简单来说就是客户端请求服务器和接受服务器的响应,狭 ...

  2. Linux指令 压缩与解压

    打包: 格式:tar -cvf  压缩后的名称.tar   压缩的文件1 压缩的文件2 ```压缩的文件n(压缩多个文件为一份时各个文件以空格隔开) 例子:tar -cvf  tomcats.tar ...

  3. Centos7-驱动小米WIFI做AP

    参考文章: http://blog.csdn.net/sumang_87/article/details/38168877 http://blog.csdn.net/hktkfly6/article/ ...

  4. [Swift]LeetCode354. 俄罗斯套娃信封问题 | Russian Doll Envelopes

    You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...

  5. Spring Boot: Yaml配置文件 以及 @ConfigurationProperties属性获取

    Yaml配置文件 概述 Spring Boot在支持application.properties配置文件的同时,也支持application.yaml配置文件. 配置文件中的属性,可以通过: 通过@V ...

  6. 【Storm篇】--Storm并发机制

    一.前述 为了提高Storm的并行能力,通常需要设置并行. 二.具体原理 1. Storm并行分为几个方面: Worker – 进程一个Topology拓扑会包含一个或多个Worker(每个Worke ...

  7. Zara带你快速入门WPF(2)---布局篇

    一.章节目标 这几章节我们会创建一个完整的Window程序,包括使用DataGrid空间,数据绑定是把.NET类中的数据提供给用户界面的一个重要概念,还允许修改数据,包括.NET4.5新增的INoti ...

  8. .NET Core脚本工具dotnet-script

    什么是dotnet-script "dotnet-script"是github上一个开源的.net core global tool, 项目地址https://github.com ...

  9. 从零开始学习PYTHON3讲义(三)写第一个程序

    <从零开始PYTHON3>第三讲 本页面使用了公式插件,因博客主机过滤无法显示的表示抱歉,并建议至个人主页查看原文. ​ 我见过很多初学者,提到编程都有一种恐惧感,起源是感觉编程太难了.其 ...

  10. RAID磁盘阵列是什么(一看就懂)

    在单机时代,采用单块磁盘进行数据存储和读写的方式,由于寻址和读写的时间消耗,导致I/O性能非常低,且存储容量还会受到限制.另外,单块磁盘极其容易出现物理故障,经常导致数据的丢失.因此大家就在想,有没有 ...