bingdian3721

公告

统计

Asp.net控件开发-如何给控件添加自动配置web.Config文件的功能

原文地址:http://www.antardev.cn/showArticle.aspx?id=107 转载请注明出处

当使用asp.net控件时,有时需要在web.config文件中增加相应的配置项,比如一个配置节或者HttpModule或者在 appsettings中增加一个键值对等等,如果控件能够自动配置,无疑将会给用户带来一定的便利。那么如何在开发控件的过程中,加入自动配置 web.config的功能呢?
 
在AntarDev.ProgressBar控件的使用中,需要对web.config进行配置,增加一个HttpModule,在第一个版本 的时候,时需要进行手工配置的,在后续版本的设计中,就加入了自动配置功能。自动配置功能实际上就是执行一段代码,对Web.config进行操作,关于 这段代码的位置,应该符合不能给控件的运行带来太大负担的原则。
 
首先假设放到运行时代码中,当HttpModule不存在时则修改web.config并保存,注意:当运行时修改web.config会导致应用程序重新启动的,并且每次运行都检测,也不合适。
 
假设放到设计时代码中,就没有这个问题。将该代码加入到设计时代码中。检测web.config中是否正确的配置了HttpModule,如果 没有配置,则自动增加。同时在设计时代码中的检测,决定了如果在使用控件的时候,没有使用IDE,直接通过编写代码来使用控件的话,HttpModule 还是需要自己配置的。但是在设计时代码中做检测的方法,对于大部分的开发人员来讲,是比较方便和适用的。
 
来看主要代码:
 
private void HttpModuleConfig()
{

    IWebApplication webapp = (IWebApplication)Component.Site.GetService(typeof(IWebApplication));

    System.Configuration.Configuration cf = webapp.OpenWebConfiguration(false);

    System.Web.Configuration.HttpModulesSection hts = cf.GetSection("system.web/httpModules") as System.Web.Configuration.HttpModulesSection;

    bool flag = false;

    for (int i = 0; i < hts.Modules.Count; i++)

    {

       if (hts.Modules[i].Type.ToLower() == "AntarDev.ProgressBarHttpModule".ToLower())

       {

           flag = true;

           break;

       }

    }

    if (!flag)

    {

        hts.Modules.Add(new HttpModuleAction("AntarDev.ProgressBar", "AntarDev.ProgressBarHttpModule"));

        cf.Save();

     }

}
 
关键代码在前两句:
Component.Site.GetService(typeof(IWebApplication))获取一个 IWebApplication接口,该接口“提供用于在设计时访问设计宿主(如 Microsoft Visual Studio 2005)中的 Web 应用程序的接口。”,也就是说,通过该接口能够获取配置信息和项目信息等。
 
webapp.OpenWebConfiguration(false);打开配置文件准备编辑(MSDN解释有些错误)。
 
下面就是获取HttpModules列表,并判断是否存在指定的HttpModule了,如果没有就添加并保存。
 

原文地址:http://www.antardev.cn/showArticle.aspx?id=107 转载请注明出处

posted on 2009-02-26 23:30 bingdian3721 阅读(467) 评论(0) 编辑 收藏