陋室铭
永远也不要停下学习的脚步(大道至简至易)

前一阶段用spring.net做东西,一直想模拟一下它的页面注入,不清楚它是怎么实现的,懒得看他源码,自己简单写了一个,估计也差不多

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Reflection;
using System.Data;

namespace LibertyPortal.CommonTools.CustomHttpModules
{
    class CustomHttpModules : IHttpModule
    {
        #region IHttpModule 成员
        /// <summary>
        /// 处置由实现 IHttpModule 的模块使用的资源(内存除外)。
        /// </summary>
        public void Dispose()
        {
        }
        /// <summary>
        /// 初始化模块,并使其为处理请求做好准备。
        /// </summary>
        /// <param name="context"></param>
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);

            context.EndRequest += new EventHandler(context_EndRequest);
            context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
        }
        #endregion

        /// <summary>
        /// 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            HttpContext context = application.Context;
            HttpResponse Response = context.Response;
            //防止在Iframe的时间Cookie丢失
            Response.AddHeader("P3P", "CP=CAO PSA OUR");
            context.Response.Write("<h1><font color=red>HelloWorldModule: Beginning of Request</font></h1><hr>");
        }
        private void context_PreRequestHandlerExecute(Object source, EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            System.Web.UI.Page p = context.Handler as System.Web.UI.Page;
            PropertyInfo pi = p.GetType().GetProperty("dt");
            DataTable dt = new DataTable();
            pi.SetValue(p, dt, null);
            object dd = pi.GetValue(p, null);

        }
        private void context_EndRequest(Object source, EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            context.Response.Write("<hr><h1><font color=red>HelloWorldModule: End of Request</font></h1>");

        }
    }
}

 

页面:

 

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Reflection;

public partial class HttpHandlerHttpModle_Default : System.Web.UI.Page
{
    private DataTable _dt;
    public DataTable dt
    {
        get
        {
            return _dt;
        }
        set
        {
            _dt = value;
        }
    }

    protected void Page_Init(object sender, EventArgs e)
    {
   
    }
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

    }
}

 Webconfig

  <httpModules>
   <add name="CustomHttpModules" type="LibertyPortal.CommonTools.CustomHttpModules.CustomHttpModules,LibertyPortal.CommonTools"/>
  </httpModules>

posted on 2008-12-08 17:31  宏宇  阅读(497)  评论(1编辑  收藏  举报