具体步骤如下:
1、修改web.config文件,在monorail节中加入以下定义
MonoRail学习笔记五:定制服务实现自定义功能 <services>
MonoRail学习笔记五:定制服务实现自定义功能 <service id="UrlTokenizer" type="TestSiteNVelocity.CustomUrlTokenizer, TestSiteNVelocity" />
MonoRail学习笔记五:定制服务实现自定义功能 </services>
2、编写自己的CustomUrlTokenizer类
这里为了方便,我直接复制默认的Castle.MonoRail.Framework.Services.DefaultUrlTokenizer类,将复制好的类放入TestSiteNVelocity,改名为CustomUrlTokenizer,然后在此基础上修改。
原方法:
MonoRail学习笔记五:定制服务实现自定义功能 private void ExtractAreaControllerAction(string rawUrl, out string area, out string controller, out string action)
MonoRail学习笔记五:定制服务实现自定义功能 {
MonoRail学习笔记五:定制服务实现自定义功能 string[] parts = rawUrl.Split('/');
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 if (parts.Length < 2)
MonoRail学习笔记五:定制服务实现自定义功能 {
MonoRail学习笔记五:定制服务实现自定义功能 throw new UrlTokenizerException("Url smaller than 2 tokens");
MonoRail学习笔记五:定制服务实现自定义功能 }
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 action = parts[parts.Length - 1];
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 int fileNameIndex = action.IndexOf('.');
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 if (fileNameIndex != -1)
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 action = action.Substring(0, fileNameIndex);
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 controller = parts[parts.Length - 2];
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 area = string.Empty;
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 if (parts.Length - 3 == 0)
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 area = parts[parts.Length - 3];
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 else if (parts.Length - 3 > 0)
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 StringBuilder areaSB = new StringBuilder();
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 for(int i = 0; i <= parts.Length - 3; i++)
MonoRail学习笔记五:定制服务实现自定义功能 {
MonoRail学习笔记五:定制服务实现自定义功能 if (parts[i] != null && parts[i].Length > 0)
MonoRail学习笔记五:定制服务实现自定义功能 {
MonoRail学习笔记五:定制服务实现自定义功能 areaSB.Append(parts[i]).Append('/');
MonoRail学习笔记五:定制服务实现自定义功能 }
MonoRail学习笔记五:定制服务实现自定义功能 }
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 if (areaSB.Length > 0)
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 areaSB.Length -= 1;
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 area = areaSB.ToString();
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 }
修改后的方法:
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 controller = "servlet"; ;
MonoRail学习笔记五:定制服务实现自定义功能 area = "";
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 return;
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能
MonoRail学习笔记五:定制服务实现自定义功能 红色标示的为修改部分
接下来就可以按常规方式编写ServletController类和view部分
当然我们也同样可以定义
[DefaultAction("Index")]
public class ServletController : Controller
这篇文章只是涉及了自定义服务的很小的一个点,我们还可以自定义:
ControllerFactory
ViewComponentFactory
ResourceFactory
EmailSender
EmailTemplateService
UrlBuilder
ValidatorRegistry
等很多服务,来实现特定效果
本文转自永春博客园博客,原文链接:http://www.cnblogs.com/firstyi/archive/2007/10/22/932768.html,如需转载请自行联系原作者