使用RazorGenerator实现项目模块分离

一,介绍RazorGenerator的安装方式

1在vs-tool-拓展和更新,找到razor generator并安装

2 以图2-1为例,在建立的Module_X工程中,将对应的cshtml应用zazorgenerator工具(图2-2),结果应如图2-3所示

图2-1

图2-2

图2-3

二,RazorGenerator实现模块分离

在项目建立时,由于项目模块较多,因此就需要将模块分离,各自建立相应工程,然后引用这些dll。然而简单的分离建立工程会出现加载不到视图资源的情况,因此有个想法,将资源也编译到dll中去即可,RazorGenerator可以帮助实现这一点,以cshtml模板生成相应的代码,然后将此代码编译进dll中,从而实现了模块分离的需求,而且还由于资源已经编译进dll,还能提高程序的性能。

做法:

1,将所有Module_X的工程生成路径设置到host工程下一文件夹。

2,在host工程中的App_Start添加WebActivator类,在此类中实现Module_X的dll加载。

注意:在引用中nuget安装RazorGenerator.Mvc 。

using PrecompiledMvcViewEngineContrib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Compilation;
using System.Web.Mvc;
using System.Web.WebPages;
using RazorGenerator.Mvc;
using System.IO;

[assembly: System.Web.PreApplicationStartMethod(
                typeof(_00Host.App_Start.WebActivator), "start")]

namespace _00Host.App_Start
{
    public static class WebActivator
    {
        private static string hostpath = "E:\\项目\\vs2012\\ITP\\ITP05.WebUI\\00Host";
        public static void start()
        {
            RegisterPrecompiledMVCEngines();
        }

        private static void RegisterPrecompiledMVCEngines()  //加载所有模块dll
        {
            string dllpath = hostpath + "\\App_Data\\WEBUI";
            //PrecompiledMvcEngine a = new PrecompiledMvcEngine();
            IList<PrecompiledViewAssembly> views = new List<PrecompiledViewAssembly>();
            foreach (string file in Directory.EnumerateFiles(dllpath, "Module_*.dll"))
            {
                var assembly = Assembly.Load(AssemblyName.GetAssemblyName(file));
                BuildManager.AddReferencedAssembly(assembly);
                views.Add(new PrecompiledViewAssembly(assembly));
            }
            var engine = new CompositePrecompiledMvcEngine(views.ToArray());
            ViewEngines.Engines.Add(engine);
            VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);

        }
    }
}

由此,只要以host为启动工程启动,即可使用到其它模块,各个模块也能使用各自的资源,实现模块分离。

结果如下所示

时间: 2024-11-01 12:23:20

使用RazorGenerator实现项目模块分离的相关文章

Maven学习总结(五)——聚合与继承【如果想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合】

一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module> 3 <module>模块二</module> 4 <module>模块三</module> 5 </modules> 例如:对项目的Hello.HelloFriend.MakeFriends这三个模块进行聚合 1 <modules>

044医疗项目-模块四:采购单模块—采购单保存(Dao,Service,Action三层)

我们上上一篇文章(042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中这里没有写采购量,我们这篇文章做的就是把采购量写进入,也就是Updata之前的那个记录.这样采购单里面的记录就完整了. 如下: Dao层:用的是逆向工程生成的:yycgdmxMapper.updateByPrimaryKeySelective(yycgdmx_updat

C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系

我们在开发微信相关的应用的时候,一般需要完善的基础模块支持,包括微信公众号,微信企业号,以及一些业务模块的支持,一般随着功能的增多,我们需要非常清晰的界定他们的关系.模块的分拆以及合并往往需要考虑的代码的重用,而且尽量做到简单而不重复.本篇随笔基于我的微信框架的各个模块的功能介绍以及他们关系的描述. 1.公众号模块的命名及相关关系 微信开发,我们首先需要利用我们的语言(这里是利用C#语言),为所有用到的API接口实现进一步的封装,方便使用,微信API模块包含的内容很多,大概可以分为下面的项目.

2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路

layout: post title: 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路 key: 20180517 tags: OAA flow chart sequence diagram 泳道图 时序图 图表 OAA PM Master modify_date: 05-17 --- OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路 说明: 本文发布于: gitee,github,博客园 转载和引用请指明原作者和连接及出处. 正文: 说明:这

Android 日志工具:项目模块较多时的救星

在项目开发中,遇到一个痛点:项目模块较多,不同日志混合在一起:出现线上问题时,所有日志信息混合在一起,定位困难.为解决这个问题,有了这个工具.这个工具有以下作用: 开发模式debug 为 true 时,打印在控制台,同时打印到文件: 发版模式debug 为 fase 时,只打印到文件: 方便日志上传 支持日志压缩上传 缓存文件 区分模块 支持不同功能模块,日志打印到不同文件中: 第一次看文章的朋友可以关注我,会不定期发布大厂面试题.Android架构技术知识点及解析等内容,还有学习PDF+源码笔

cocos2d-x开发: 如何从项目中分离出接口范例

cocos2d-x开发,包括核心模块接口开发和脚本部分的业务逻辑实现.从上层应用需求开始说,脚本在做业务逻辑实现的时候, 很多时候都需要依赖底层的接口功能,但是不是所有的人都可以游刃有余的去明白该怎么使用下层的接口,这不仅仅是语言的区别,其中还包括接口开发者在设计之初就期望的使用方式问题,所以一般都应该提供接口使用demo,由于我都是使用lua,所以我习惯的称之为unittest,接口功能测试则是以testcase的方式呈现.其实也就只是一种叫法. 先来说一下为什么我会做这样子的区分,我见过一些

049医疗项目-模块五:权限设置-第三方系统的接入

我们先演示要实现的功能: 单击: 我们看着有三个子模块: 点击模块管理: 在模块管理中,我们可以设置一共有几个模块,每个模块里面有哪些具体的操作等. 角色管理: 给角色分配权限. 好,我们接下来看具体的实现: 我们先把第三方系统引入到工程中: import工程. 然后修改sysconfig,和sysmanager系统中的/WEB-INF/proxool.xml文件 接着 然后重启Tomcat. 然后修改代码: 我们增加下面连个Action层:其实我们的第三方系统的实现原理就是我们从自己的项目中的

关于项目模块间交互的一个设计思路

1.背景 某API项目,项目天然地按业务分为了不同的包,那么每个包都独立处理自己的业务逻辑,独立接管数据源,独立地向外部提供数据,彼此基本互不通信. 不过,随着需求的增多和业务的堆积,项目的复杂度越来越大,但是每个独立模块却又不足以独立出去成为一个单独的项目,而模块间又因业务需要开始发生交互的时候,问题来了. 2.问题描述 由于模块间的数据交互,按照Spring的套路,是可以直接把容器接管的对象注入到你需要的地方去的,那么一旦你开始问其他模块要数据,开始要命了.如上图,如果模块3问模块2和模块4

项目模块未找到错误

我今天正在整理的时候不小心 把我的项目主文件放在其他目录下面了 , 然后就后台服务一直起不了, 就是黑命令框,一直报  md模块未定义 所以我建议大家 一定要仔细检查自己的代码-千万不可马虎大意.   这算是非常低级的错误了 404   :url路有错误 500 : 后端代码有错 405 :get方法和post方法 的问题 原文地址:https://www.cnblogs.com/weifeng-888/p/10713313.html