OSGi.NET外掛程式架構能夠適用於任何.NET應用環境,提供統一的模組化、SOA、擴充的外掛程式開發模型,並能夠通過外掛程式倉庫來發布外掛程式更新,實現外掛程式的自動升級,統一應用的部署。現在我們來看一下,使用OSGi.NET開發ASP.NET MVC外掛程式化應用。
1 準備工作
進入iOpenWorks網站 http://www.iopenworks.com/ 下載OSGi.NET外掛程式架構,你可以從以下地址來下載外掛程式架構:http://www.iopenworks.com/Products/SDKDownload。下載完成後,安裝該SDK。SDK支援VS 2005/2008/2010,目前對VS2012的支援正在開發。
接著,您可以從以下地址下載空的ASP.NET MVC 3.0主程式:/Files/baihmpgy/1_MvcOSGi.zip。這是我們開發ASP.NET MVC外掛程式應用的Demo。
2 擷取一個主介面
安裝完OSGi.NET外掛程式SDK後,使用VS 2010開啟下載的ASP.NET MVC 3.0主程式,按F5運行該項目,進入外掛程式中心頁面。在這裡選擇“Win7 風格 Web 介面架構”。
接著,點擊“下載安裝應用“,以下是下載的進度和最終安裝介面完成的提示。
這時,你可以發現我們已經擁有一個仿Windows 7風格的Web介面了。
3 開發ASP.NET MVC外掛程式
下面,我們先建立一個ASP.NET MVC外掛程式項目,後面選擇的是Empty MVC項目。
接著,我們需要為該外掛程式項目添加一個外掛程式描述資訊清單檔Manifest.xml檔案,該檔案的內容如下。在這裡聲明了該外掛程式的SymbolicName為HelloWorldPlugin2,它聲明了一個本地程式集HelloWorldPlugin2.dll。
<?xml version="1.0" encoding="utf-8" ?> <Bundle xmlns="urn:uiosp-bundle-manifest-2.0" SymbolicName="HelloWorldPlugin2"> <Runtime> <Assembly Path="HelloWorldPlugin2.dll"/> </Runtime> </Bundle>
緊接著,我們需要將Web.config更改一下,刪除一些與主程式衝突的內容。
View Code
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0"> <assemblies> <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </assemblies> </compilation> <pages> <namespaces> <add namespace="System.Web.Helpers" /> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="System.Web.WebPages"/> </namespaces> </pages> </system.web> </configuration>
下面,我們添加一個Controller和一個View,內容為預設。
接著,我們編輯Views中的_ViewStart.cshtml檔案,更改一下Layout的路徑。
@{ Layout = "~/Plugins/HelloWorldPlugin2/Views/Shared/_Layout.cshtml"; }
下面,我們再更改一下Manifest.xml檔案,將當前MVC外掛程式的HelloController的Index Action註冊到介面架構中,可以直接通過Win 7 風格 Web 介面架構來訪問。
<?xml version="1.0" encoding="utf-8" ?> <Bundle xmlns="urn:uiosp-bundle-manifest-2.0" Name="MVC外掛程式2" SymbolicName="HelloWorldPlugin2"> <Runtime> <Assembly Path="HelloWorldPlugin2.dll"/> </Runtime> <Extension Point="UIShell.WebApplications"> <Application ToolTip="MVC外掛程式2" Icon="/{BundleRelativePath}/Images/Application.png" DefaultPage="/HelloWorldPlugin2/Hello" WindowState="maximized"> <NavigationNode Text="List Movies" ToolTip="List All Movies" ImageUrl="/{BundleRelativePath}/Images/Application.png" NavigateUrl="/HelloWorldPlugin2/Hello/Index"/> </Application> </Extension> </Bundle>
現在我們來運行一下項目。這時,你可以發現MVC外掛程式表徵圖已經出現在主介面,雙擊開啟主介面後,預設開啟了MVC外掛程式的Index頁面了。你可以從以下地址來下載當前外掛程式項目的內容:/Files/baihmpgy/2_MvcOSGi_EmtyPlugin.zip。
接下來,我們為HelloWorldPlugin2添加更多的內容也頁面,此時,我們的HelloController控制器代碼如下,它為Movie記錄定義了Create/Edit/Save/Delete的動作。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using HelloWorldPlugin2.Models;namespace HelloWorldPlugin2.Controllers { public class HelloController : Controller { public ActionResult Index() { var model = new MovieList(); return View(model.GetMovies()); } public ActionResult CreateNew() { var model = Movie.NewMovie(); return View(model); } public ActionResult SaveNewMovie(Movie movie) { var model = new MovieList(); model.GetMovies().Add(movie); return RedirectToAction("Index"); } [HttpGet] public ActionResult EditMovie(int id) { var model = new MovieList().GetMovies().Find(p => p.Id == id); return View(model); } [HttpPost] public ActionResult EditMovie(Movie movie) { var model = new MovieList().GetMovies().Find(p => p.Id == movie.Id); model.Name = movie.Name; model.Rating = movie.Rating; return RedirectToAction("Index"); } public ActionResult DeleteMovie(int id) { new MovieList().GetMovies().Remove(new MovieList().GetMovies().Find(p => p.Id == id)); return RedirectToAction("Index"); } } }
此時,我們再運行項目,如下所示,在這裡,你可以來增加/修改/刪除一條Movie記錄了。你可以通過以下地址來下載當前的外掛程式項目:/Files/baihmpgy/3_MvcOSGi_HelloWorldPlugin2.zip。
4 建立其它MVC 3外掛程式
同樣的,我們可以接著建立一個MVC外掛程式——HelloWorldPlugin,你可以通過以下地址來下載項目當前的內容:/Files/baihmpgy/4_MvcOSGi_MoreMvcPlugins.zip。通過Web介面架構,可以直接存取到該外掛程式。
當然,你也可以通過http://localhost:35718/HelloWorldPlugin2/Hello/Index網址來直接存取頁面,Url的路由規則為{plugin}/{controller}/{action}。
此時,開放工廠遠端管理工具,可以發現有10個外掛程式,在這裡,你可以Start/Stop/Uninstall核心載入的外掛程式。
源碼:
/Files/baihmpgy/1_MvcOSGi.zip
/Files/baihmpgy/2_MvcOSGi_EmtyPlugin.zip
/Files/baihmpgy/3_MvcOSGi_HelloWorldPlugin2.zip
/Files/baihmpgy/4_MvcOSGi_MoreMvcPlugins.zip