zoukankan      html  css  js  c++  java
  • 使用RazorGenerator实现项目模块分离

    一,介绍RazorGenerator的安装方式

    1vs-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_Xdll加载。

    注意:在引用中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为启动工程启动,即可使用到其它模块,各个模块也能使用各自的资源,实现模块分离。

     结果如下所示

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/xiumukediao/p/5989793.html
Copyright © 2011-2022 走看看