天天看点

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

具体步骤如下:

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,如需转载请自行联系原作者