文章出處

插件式開發的優勢

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.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.主項目引用該項目,生成

最終效果

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()