好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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

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

这时,你可以发现我们已经拥有一个仿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

 下面,我们添加一个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

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

 

 

标签:  OSGi.NET ,  MVC

 

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于基于OSGi.NET开发ASP.NET MVC 3.0插件化应用程序的详细内容...

  阅读:49次