天天看點

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,如需轉載請自行聯系原作者