zoukankan      html  css  js  c++  java
  • 基于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 License本文基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名道法自然(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
     
     
    标签: OSGi.NETMVC

     

  • 相关阅读:
    java 14 -7 Date
    java 14 -6 BigInteger和BigDecimal
    java 14 -5 System类
    java14-4 Pattern和Matcher类的使用
    java 14-3 正则表达式的分割
    转:StringBuilder与StringBuffer的区别(转)
    kafka之config/server.properties配置参数说明
    Kafka内核理解:消息的收集/消费机制
    kafka删除topic及其相关数据
    kafka使用问题解决
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2848135.html
Copyright © 2011-2022 走看看