上海做网站建设公司排名,苏州百度快速排名优化,制作网页网站小说教程,wordpress默认后台登陆自从吾修主页上发布了QMVC1.0#xff0c;非常感兴趣#xff0c;用了半月的时间学习#xff0c;真的感觉收益非浅#xff0c;在此声明非常感谢吾修大哥的分享#xff01; 1、轻快简单#xff0c;框架就几个类#xff0c;简单#xff0c;当然代码少也就运行快#xff01… 自从吾修主页上发布了QMVC1.0非常感兴趣用了半月的时间学习真的感觉收益非浅在此声明非常感谢吾修大哥的分享 1、轻快简单框架就几个类简单当然代码少也就运行快单纯的MVC使的如果你想扩展框架可以轻易的在QMVC上增加和减少功能也就是说更容易的去修改和读懂源码。 2、可以与webform框架融合也就是说你用webform和mvc共同在同一个项目中运行。 3、QMVC APP开发QMVC APP可以轻易实现多个QMVC项目合并到一个项目中运行也可以轻易将其分离开独立运行比如一个网站常有论坛、文章系统、新闻系统等如果你的程序用qmvc app哪么可以轻易实现多个系统的融合。 本文主题“QMVC高级开发”所谓高级我可不认为就是学不会搞不懂的忽悠者是高级!而是高与初级的层面上知识所以在此我假设你己经懂了QMVC的基础级应用如果想了解QMVC的初级应用可以参考我写的一篇文章《高性能.NET MVC之QMVC》或QMVC官网www.wuxiu.org。 怎样的框架是最适合你的哪么豪无疑问最适合你的框架什么是最适合自己的肯定是量身定制的就像是如果说qmvc他的代码非常少层次简单逻辑清晰简单。你可以通过基于QMVC轻易扩展成适合自己系统的框架本文就谈谈如何扩展自己的MVC APP框架、谈谈QMVC源码结构 1、QMVC源码分析 首先QMVC源码中存在两种MVC模式一种是QMVC基本框架一种是QMVC APP框架QMVC APP的代码是基于QMVC基本框架实现的源码中APPS目录中存的是关于QMVC APP框架的实现代码。根目录下是QMVC基本框架Router为QMVC的路由功能用HTTP请求地址的分析。 ControllerBase类 所有控制器的基类 IMVCModel 模型调用接口当然你的Model也可以不继承于此接口如果想在Model中调用QMVCRazorPage类哪么可以实现接口中获取。 MVCRazorPageBase类 是关于View模板的基类 QMVCCore类 QMVC框架的核心类控制qmvc运行的支持者。 ViewResult类 是Controller传值给QMVCCore去调用Razor模板时的信息类Controller把要显示的信息给ViewResultQMVCCore通过ViewResult加载Razor模板。 Router.IRouterProvider接口 如果你想重写QMVC的路由功能哪么可以实现Router.IRouterProvider接口实现。 至于APPS中的类于以上的类类似并且实现了固定的Router。 如果你想重写模板显示路径规则可以重写ControllerBase类中的getTemplateUrl方法这无疑对你编写自己的框架起到了最大控制的空间原方法代码 protected virtual string getTemplateUrl(string themeName,string controllerName,string viewName)
{return ~/ themeName Views/ controllerName / viewName .cshtml;
} DefaultRouter类 using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;namespace wuxiu.QMVC.Router
{public class DefaultRouter : IRouterProvider{string DefaultController;string DefaultAction;RouterControllerCollection controllers new RouterControllerCollection();public DefaultRouter(Assembly asm, string defaultController, string defaultAction){DefaultController defaultController;DefaultAction defaultAction;//controllers.LoadAssembly(asm);}public ControllerBase LoadUrl(HttpContextBase context, string apprawurl){string controllerName DefaultController;string action DefaultAction;string pageurl;if (apprawurl.IndexOf(?) ! -1){pageurl apprawurl.Substring(0, apprawurl.IndexOf(?));}else pageurl apprawurl;string[] urls Utils.ClearStrArrayEmpty(pageurl.Split(/));string[] urldata;if(urls.Length0){controllerNameurls[0];}else controllerNameDefaultController;if(urls.Length1){actionurls[1];if (!action.EndsWith(.action,StringComparison.OrdinalIgnoreCase)){return null;} action action.Substring(0,action.Length - .action.Length);}else actionDefaultAction;if(urls.Length2){urldatanew string[urls.Length-2];for(int i2;iurls.Length;i)urldata[i-2]urls[i];}else urldatanew string[]{};Type ControllerType controllers.GetController(controllerName);if (ControllerType ! null){ControllerBase controller Activator.CreateInstance(ControllerType) as ControllerBase;controller.init(context, controllerName, action, urldata);return controller;}return null;}}
} QMVC默认路由器类没有实现正则表达式其实我觉得这是一个好事因为使用字符分析更准确性能更佳。DefaultRouter类中实现了IRouterProvider接口在LoadUrl函数中分析了http请求地址并且通过反射的方式调用的控制器中的方法。 2、QMVC APP介绍 QMVC APP的实现目的是为了实现多个项目融合提出的解决方案当然如果你的程序按照QMVC APP模式开发可以很容易的实现与另一个APP之间融合到一个站点中运行。 如果你的项目按照QMVC APP模式开发哪么Controller是继承自wuxiu.QMVC.APPS.APPController基类每一个应用中必须实现APPProvider类。每个应用中存放app.config文件。 QMVC APP目录结构 APPS APPName DefaultViews ControllerName ActionName.cshtml ... App.config Controllers Models APPProvider.cs Global.asax Web.config 以上树中APPS目录是必须目录用于包含当前项目中所有的应用文件夹APPName是应用的文件夹其中包括了Views和app.configViews里存放了应用所用的视图app.config中定义了应用的配置信息。 APPProvider.cs是APPS模式中所有应用实现的一个类他继承于wuxiu.QMVC.APPS.APPProvider类该类在QMVC初始化时调用用于初始化APP。 Models和Controllers文件为当前应用的相关控制器和模型存放目录。 QMVC APP项目配置 若建一个QMVC APP模式的项目必须以6.2节中定义的目录结构外需要修改一些配置文件让ASP.NET运行框架支持QMVC APP运行。 Web.config中添加或修改以下配置项 configurationsystem.webcompilation debugtrue targetFramework4.5assembliesadd assemblySystem.Web.WebPages.Razor2, Version0.0.0.0, Cultureneutral, PublicKeyToken14679ed9c77dd5f5 /add assemblySystem.Web.WebPages2, Version0.0.0.0, Cultureneutral, PublicKeyToken14679ed9c77dd5f5 /add assemblySystem.Web.Razor2, Version0.0.0.0, Cultureneutral, PublicKeyToken14679ed9c77dd5f5 //assembliesbuildProvidersremove extension.cshtml/addextension.cshtmltypeSystem.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor2//buildProviders/compilation/system.websystem.webServermodules runAllManagedModulesForAllRequeststrue//system.webServer/configuration APPS/web.config中添加或修改以下配置项 configurationconfigSectionssectionGroup namesystem.web.webPages.razor typeSystem.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor2section namehost typeSystem.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor2 requirePermissionfalse /section namepages typeSystem.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor2 requirePermissionfalse //sectionGroup/configSectionssystem.web/system.websystem.web.webPages.razorpages pageBaseTypewuxiu.QMVC.MVCRzorPageBasenamespacesadd namespacewuxiu.QMVC //namespaces/pages/system.web.webPages.razor
/configuration APPS/APPName/APPProvider.config ?xml version1.0 encodingutf-8 ?app name贴吧系统version1.0copyrightbobbyurlFolderwuxiuappProviderClasswuxiu.tiebaAPP.TiebaAPPProviderassemblybin:wuxiu.tiebaAPPenabletrueappSettingsadd key value/... /appSettingscustomElements/customElements /app 如果您创建一个QMVC APP哪么必须写一个app.config描述您的应用信息QMVC会按照您的配置去加载应用并且把您的配置信息传给应用。 APP节点属性 Name 应用的名称 Version 当前应用的版本号 appProviderClass 表示实现wuxiu.QMVC.APPS.APPProvider类的命名空间和类名用于初始化APP的类。 assembly 当前应用的APPProvider所在的类库值有两种书写形式 1、file冒号开头标识app/bin/目录下的dll文件名,如“file:mydll.dll”。 2、bin:默认为程序跟目录Bin目录下的程序集名称,如“bin:mydll”。 说明推荐使用bin前缀因为file虽然可以独立自己的程序目录确存在着运行中独占的问题可能导致程序运行页dll不允许移动和删除。 Enable 标识当前程序是否可用值有两个true或false。 以上章节是翻译自吾修主页的QMVC Doumentation章节中关于QMVC APP章节 实现一个自己的AppController public class HomeController:wuxiu.QMVC.APPS.APPController{public wuxiu.QMVC.ViewResult Index(){return View();}
} 实现一个IMVCModel类 当在模型类中可以获取到MVCRazorPage对象无疑将Model的功能增加他可以更灵活的提供些程序逻辑减少了Razor模板中的代码毕竟Razor是给美工操作的层面代码。 public class MyModel:wuxiu.QMVC.IQMVCModel{public string LoginPageUrl { get { return page.APPUrlStart /user/login.action; } }wuxiu.QMVC.APPS.APPRazorPage page;public void Init(QMVCRzorPageBase page){this.page (wuxiu.QMVC.APPS.APPRazorPage)page;}} 转载于:https://www.cnblogs.com/jsmblog/p/qmvc_app.html