`
raisun_1988
  • 浏览: 117812 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MonoRail学习笔记五:定制服务实现自定义功能

    博客分类:
  • .Net
阅读更多

在上一篇MonoRail学习笔记四:MonoRail基本流程分析 中我提到,MonoRail中可以自定义一些服务。比如可以定义自己的Url解析类,来实现http://localhost:***/index.railshttp://localhost:***/*.rails 的效果。
具体步骤如下:
1、修改web.config文件,在monorail节中加入以下定义
<services>
<serviceid="UrlTokenizer"type="TestSiteNVelocity.CustomUrlTokenizer,TestSiteNVelocity"/>
</services>

2、编写自己的CustomUrlTokenizer
这里为了方便,我直接复制默认的Castle.MonoRail.Framework.Services.DefaultUrlTokenizer类,将复制好的类放入TestSiteNVelocity,改名为CustomUrlTokenizer,然后在此基础上修改。
当然,这个类中有很多方法,也就可以自定义很多功能,为了实现http://localhost:***/*.rails 的效果,我们只需要修改ExtractAreaControllerAction方法。
原方法:
privatevoidExtractAreaControllerAction(stringrawUrl,outstringarea,outstringcontroller,outstringaction)
{
string[]parts=rawUrl.Split('/');

if(parts.Length<2)
{
thrownewUrlTokenizerException("Urlsmallerthan2tokens");
}


action
=parts[parts.Length-1];

intfileNameIndex=action.IndexOf('.');

if(fileNameIndex!=-1)
{
action
=action.Substring(0,fileNameIndex);
}


controller
=parts[parts.Length-2];

area
=string.Empty;

if(parts.Length-3==0)
{
area
=parts[parts.Length-3];
}

elseif(parts.Length-3>0)
{
StringBuilderareaSB
=newStringBuilder();

for(inti=0;i<=parts.Length-3;i++)
{
if(parts[i]!=null&&parts[i].Length>0)
{
areaSB.Append(parts[i]).Append(
'/');
}

}


if(areaSB.Length>0)
{
areaSB.Length
-=1;
}


area
=areaSB.ToString();
}

}

修改后的方法:
privatevoidExtractAreaControllerAction(stringrawUrl,outstringarea,outstringcontroller,outstringaction)
{
string[]parts=rawUrl.Split('/');

action=parts[parts.Length-1];

intfileNameIndex=action.IndexOf('.');

if(fileNameIndex!=-1)
{
action=action.Substring(0,fileNameIndex);
}


if(parts.Length<2)
{
controller="servlet";;
area="";

return;
}


controller
=parts[parts.Length-2];

area
=string.Empty;

if(parts.Length-3==0)
{
area
=parts[parts.Length-3];
}

elseif(parts.Length-3>0)
{
StringBuilderareaSB
=newStringBuilder();

for(inti=0;i<=parts.Length-3;i++)
{
if(parts[i]!=null&&parts[i].Length>0)
{
areaSB.Append(parts[i]).Append(
'/');
}

}


if(areaSB.Length>0)
{
areaSB.Length
-=1;
}


area
=areaSB.ToString();
}

}
红色标示的为修改部分
其实意思很简单,就是当访问http://localhost:***/*.rails 形式的页面时,默认的controller类为ServletController类
接下来就可以按常规方式编写ServletController类和view部分

这样之后当我们访问http://localhost:***/index.rails时,调用的就是ServletCOntroller类的Index方法,当访问http://localhost:***/bag.rails 时,调用的就是ServletCOntroller类的Bag方法 ......

当然我们也同样可以定义
[DefaultAction("Index")]
public class ServletController : Controller
让所有未定义的http://localhost:***/*.rails访问调用ServletController的Index方法

这篇文章只是涉及了自定义服务的很小的一个点,我们还可以自定义:
ControllerFactory
ViewComponentFactory
ResourceFactory
EmailSender
EmailTemplateService
UrlBuilder
ValidatorRegistry

等很多服务,来实现特定效果
分享到:
评论

相关推荐

    Monorail PaginationHelper.CreateCustomPage 自定义分页

    Monorail框架提供了`PaginationHelper.CreateCustomPage`方法来实现自定义分页功能,帮助开发者更灵活地控制页面数据的展示方式。 #### 二、Monorail框架简介 Monorail是基于.NET平台的一个MVC(Model-View-...

    monorail::monorail:单轨电车| 网络设计系统

    :monorail: 单轨| 网络设计系统Monorail for React帮助开发人员执行。 这些组件由SimSpace的工程师和UX设计师的核心团队开发,可实现可靠的开发工作流程,以构建美观且功能强大的Web项目。快速开始将Monorail添加到...

    MonoRailSample.rar

    MonoRail学习笔记一:一个小例子 随着微软放出消息,准备发布MVC的框架,各种议论纷至沓来。 以前用java、jsp对它的MVC结构、集中控制印象特别深刻,自从用了.NET后,虽然webform的控件很好用,总感觉有点怪怪的 ...

    MonoRail基础学习文档和实例

    2. **CRUD操作**:实例可能进一步演示如何实现创建(Create)、读取(Read)、更新(Update)和删除(Delete)的完整流程,这是Web应用中最常见的功能。 3. **模板引擎**:通过实际案例展示如何使用NVelocity或...

    MonoRail 实体类生成器

    2. **代码模板自定义**:用户可以根据需求定制实体类模板,比如添加属性注释、实现特定接口等,确保生成的代码符合项目规范。 3. **关系映射**:自动处理数据库表之间的关联关系,生成一对多、多对一、多对多等复杂...

    MonoRail例子(入门篇)

    MonoRail是 Castle Project 的一部分,它是一个开源的、基于.NET框架的Web应用程序开发框架,设计用于替代ASP.NET Web Forms,提供了更面向对象...继续学习和探索MonoRail的其他功能,将帮助你充分利用这个强大的框架。

    RAILS::monorail:RAILS 和 :man’s_shoe::hammer:鞋匠

    谢谢你的 RAILS v1.5.1 和 Cobbler v0.6.1 雷内 L.沃伦,2014-2021 电子邮件:bcgsc.ca 的 rwarren 名称 RAILS: Radial Assembly Improvement by Long Sequence Scaffolding Cobbler: Gap-filling with long ...

    monorail的小例子

    它为.NET开发者提供了一种轻量级、灵活且功能丰富的替代方案,以实现Web应用程序的构建。在本小例子中,我们将探讨Monorail的基本概念和如何进行简单的应用开发。 首先,了解Monorail的核心概念: 1. **Model**...

    学习资料monorail

    然而,由于提供的信息较少,无法确定此处“学习资料monorail”具体指的是哪个方面,因此我将从Monorail的多个可能含义来展开讨论。 首先,如果Monorail是指一种编程框架,最知名的可能是 Castle Monorail,这是一个...

    MonoRail .net

    在MonoRail中,你可以自定义控制器类来处理特定的URL路由。 3. **视图(Views)**: 视图负责呈现数据,通常以HTML格式显示给用户。MonoRail支持多种视图引擎,如NVelocity或NHaml,允许开发者使用模板语言编写动态...

    monorail的过滤器

    Monorail是一个开源的Web...总的来说,Monorail的过滤器机制提供了强大的功能,可以帮助开发者在不侵入业务逻辑的情况下增强应用程序的功能和安全性。通过合理地使用过滤器,你可以创建更健壮、可扩展的Web应用程序。

    monorail简单例子

    Monorail,中文常被称为“单轨框架”,是.NET平台上的一款轻量级Web应用程序...在深入学习Monorail时,你还会发现它对测试驱动开发(TDD)友好,支持依赖注入(DI)以及插件架构,这些都是它成为开发者选择的重要因素。

    MonoRail 上传文件 整合FCK

    在 MonoRail 中实现文件上传功能,特别是整合FCKeditor(一款富文本编辑器),可以极大地提升用户在网页上的编辑体验。 一、MonoRail上传文件 在MonoRail中处理文件上传,首先需要了解HTTP协议中的多部分/表单数据...

    kirby-vue3-starterkit:with带Vue 3和Kirby的SPA

    Kirby + Vue.js入门套件主要特征 :motorway: 自动路由 :magnifying_glass_tilted_left: SEO友好:元标记 :globe_with_meridians: :wheelchair_symbol: 无障碍前端路由 :monorail: :dizzy: 页面数据 :high_voltage: ...

    ibatisnet+monorail+vs2010

    通过学习和实践这个"ibatisnet+monorail+vs2010"项目,开发者可以深入理解如何在.NET环境中集成和使用这些技术,提高Web开发技能。同时,这个实例也展示了如何在一个现代化的开发环境中实现灵活的数据访问和高效的...

    MonoRail入门实例

    通过上述五个方面的学习,你将能够搭建起一个基本的MonoRail应用,并理解其核心机制。在实际项目中,你还可以探索更多的扩展功能,如AOP(面向切面编程)、DI(依赖注入)以及各种插件,以提升开发效率和应用性能。...

    MonoRail+IBatisNet +Velocity

    5. 在MonoRail控制器中调用IBatisNet的服务,执行数据库操作,并将结果传递给Velocity模板进行渲染。 总的来说,MonoRail、IBatisNet 和 Velocity 的组合为C#开发者提供了一个高效、灵活的Web开发解决方案。虽然...

    monorail项目-留言簿-GeustBook.rar

    本文将深入探讨Monorail项目中的GuestBook组件,包括其设计思路、技术实现以及在实际应用中的价值。 1. 设计理念与架构 Monorail项目遵循MVC(Model-View-Controller)设计模式,这是一种在Web开发中广泛采用的...

    ShoppingCart-MonoRail.rar

    《MonoRail:构建高效Web应用的框架探索》 MonoRail,这个名字在IT行业中或许并不如ASP.NET那样耳熟能详,但它却是.NET平台上的一个强大且灵活的Web应用程序框架。"ShoppingCart-MonoRail.rar"这个压缩包,包含了对...

Global site tag (gtag.js) - Google Analytics