在研究Nopcommece项目代码的时候,发现Nop.Admin是作为独立项目开发的,但是部署的时候却是合在一起的,感觉挺好

这里把他这个部分单独抽离出来,

主要关键点:

  1. 确保你的项目是MVC5 而不是MVC4或者以前的版本

    至少我用MVC4没成功,而且折腾了蛮久,

  2. 自定义ViewEngine
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc; namespace AutofacMvc5Test
    {
    public class MyPathProviderViewEngine:VirtualPathProviderViewEngine
    {
    public MyPathProviderViewEngine()
    { MasterLocationFormats = new[] {
    //Admin
    "~/WebAdmin/Views/{1}/{0}.cshtml",
    "~/WebAdmin/Views/Shared/{0}.cshtml",
    }; ViewLocationFormats = MasterLocationFormats; PartialViewLocationFormats = MasterLocationFormats;
    }
    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
    {
    IEnumerable<string> fileExtensions = base.FileExtensions;
    return new RazorView(controllerContext, partialPath, null, false, fileExtensions);
    //return new RazorView(controllerContext, partialPath, layoutPath, runViewStartPages, fileExtensions, base.ViewPageActivator);
    } protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
    {
    IEnumerable<string> fileExtensions = base.FileExtensions;
    return new RazorView(controllerContext, viewPath, masterPath, true, fileExtensions);
    }
    }
    }
  3. 设置编译输出目录

    就是把作为插件的网站项目的Dll输出目录指定到主项目的Bin目录,这里采取的策略是设置相对目录,这里把WebAdmin当做插件项目,所以设置了他的输出目录到主项目的Bin目录

  4. 注册路由

这里新建了一个AdminAreaRegistration来专门负责WebAdmin相关路由的注册,好处是每个插件负责自己的事情,相互不影响,

但是这个RegisterArea什么时候执行呢,就是主网站项目调用 AreaRegistration.RegisterAllAreas();的时候,

那么AreaRegistration.RegisterAllAreas()主要干了什么?

ASP.NET MVC会遍历通过调用BuildManager的静态方法GetReferencedAssemblies得到的程序集列表,并从中找到所有AreaRegistration类型,

然后调用每个AreaRegistration类型的RegisterArea方法

注意 之所以说这是一个比较简单的方式,是因为 这个例子只是把插件项目的DLL简单的输出到主项目的Bin目录,

插件得DLL就已经可以被成功的添加到GetReferencedAssemblies列表里,

如果就想每个插件都有自己的目录那么可能需要你手动的通过BuildManager在APPStart前把每个插件DLL加入到GetReferencedAssemblies列表里,

代码下载:  https://github.com/xlb378917466/SimplePlugin_asp.netmvc5.git

asp.net mvc5轻松实现插件式开发的更多相关文章

  1. 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用ApplicationPart动态加载控制器和视图

    标题:从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图 作者:Lamond Lu 地址:http://www.cnblogs ...

  2. 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板

    标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155 ...

  3. 从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件

    标题:从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/112 ...

  4. 从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装

    标题:从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11260750. ...

  5. 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级

    标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...

  6. 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用

    标题:从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用. 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1171 ...

  7. 从零开始实现ASP.NET Core MVC的插件式开发(七) - 近期问题汇总及部分解决方案

    标题:从零开始实现ASP.NET Core MVC的插件式开发(七) - 问题汇总及部分解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/12 ...

  8. 从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案

    标题:从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun ...

  9. 从零开始实现ASP.NET Core MVC的插件式开发(九) - 升级.NET 5及启用预编译视图

    标题:从零开始实现ASP.NET Core MVC的插件式开发(九) - 如何启用预编译视图 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1399 ...

随机推荐

  1. SGTtrick

    SGTtrick By 蒟蒻 ldxoiBy\ 蒟蒻\ ldxoiBy 蒟蒻 ldxoi Chapter 1.关于线段树操作的一些分析 我们知道,线段树有两个核心的函数pushdownpushdown ...

  2. bgfx入门练习2——找出DX,OpenGL驱动切换实现原理

    找到驱动切换的代码,自然而然就要找实现的位置了,简单搜了下,原来是GLSL Shader字节码转换到HLSL字节码,正好和Klayge做了相反的工作. 时间上似乎也差不多,Klyage是2014年搞的 ...

  3. docker学习笔记-命令大全

    容器生命周期管理 • Run OPTIONS说明: • -a :显示所有的容器,包括未运行的. • -f :根据条件过滤显示的内容. • --format :指定返回值的模板文件. • -l :显示最 ...

  4. Codeforces Round #486 (Div. 3) D. Points and Powers of Two

    Codeforces Round #486 (Div. 3) D. Points and Powers of Two 题目连接: http://codeforces.com/group/T0ITBvo ...

  5. SSM_CRUD新手练习(9)显示分页数据

    我们已经做好了用来显示数据的分页模板,现在只需要将我们从后台取出的数据填充好,显示出来. 我们使用<c:forEach>标签循环取出数据,所以需要先导入JSTL标签库 <%@ tag ...

  6. noip第16课资料

  7. Avro实现RPC

    场景:一个客户端,一个服务端(创建两个avro工程).客户端向服务端发送数据,服务端根据算法算出结果,返回给客户端. Http主外,RPC主内.(解决分布式环境下,节点间的数据通信或远程过程调用) 实 ...

  8. JavaScript获取键盘事件

    JavaScript中: onkeydown 事件会在用户按下一个键盘按键时发生. onkeypress 事件会在键盘按键被按下并释放一个键时发生. onkeyup 事件会在键盘按键被松开时发生. 支 ...

  9. 关于Android的Service知识点,你知道吗?

    目录 学习Service相关知识点: 概述: Service生命周期: Service的基本用法: 服务. 问:达叔,今日工作累吗? 答:累啊,那么问你,你知道Android中的 Service(服务 ...

  10. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...