基于OSGi.NET开发ASP.NET MVC 3.0插件化应用程序

道法自然  http://www.cnblogs.com/aces/archive/2013/01/06/2847518.html

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 界面框架”。

image

接着,点击“下载安装应用“,以下是下载的进度和最终安装界面完成的提示。

image

这时,你可以发现我们已经拥有一个仿Windows 7风格的Web界面了。

image

 

3 开发ASP.NET MVC插件

下面,我们先创建一个ASP.NET MVC插件项目,后面选择的是Empty MVC项目。

image

接着,我们需要为该插件项目添加一个插件描述清单文件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

 下面,我们添加一个Controller和一个View,内容为默认。

image

接着,我们编辑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

image

接下来,我们为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

image

4 创建其它MVC 3插件

同样的,我们可以接着创建一个MVC插件——HelloWorldPlugin,你可以通过以下地址来下载项目当前的内容:/Files/baihmpgy/4_MvcOSGi_MoreMvcPlugins.zip。通过Web界面框架,可以直接访问到该插件。

image

当然,你也可以通过http://localhost:35718/HelloWorldPlugin2/Hello/Index网址来直接访问页面,Url的路由规则为{plugin}/{controller}/{action}。

image

此时,开放工厂远程管理工具,可以发现有10个插件,在这里,你可以Start/Stop/Uninstall内核加载的插件。

image

 

源码:

/Files/baihmpgy/1_MvcOSGi.zip

/Files/baihmpgy/2_MvcOSGi_EmtyPlugin.zip

/Files/baihmpgy/3_MvcOSGi_HelloWorldPlugin2.zip

/Files/baihmpgy/4_MvcOSGi_MoreMvcPlugins.zip

 

本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 道法自然(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。

 

 
 
标签:  OSGi.NETMVC

 

你可能感兴趣的:(mvc,OSGi.NET)