当前位置:  开发笔记 > 后端 > 正文

以编程方式在运行时注册HttpModules

如何解决《以编程方式在运行时注册HttpModules》经验,为你挑选了3个好方法。

我正在编写一个应用程序,第三方供应商可以编写插件DLL并将其放入Web应用程序的bin目录中.我希望这些插件能够在必要时注册自己的HttpModule.

无论如何,我可以在运行时向管道添加或删除HttpModule,而无需在Web.Config中有相应的条目,或者在添加/删除模块时是否必须以编程方式编辑Web.Config?我知道无论哪种方式都会导致AppDomain重启,但我宁愿能够在代码中执行它,而不是为了实现相同的效果而捏造web.config.



1> Aaron Fische..:

它必须在HttpApplication生命周期中的恰当时间完成,这是HttpApplication对象初始化时(多次,对于每个HttpApplication实例一次).唯一正确的方法是HttpApplication Init().

要通过代码连接模块,您可以运行以下代码而不是web.config中的HttpModule定义:

  public class Global : System.Web.HttpApplication
  {
     // some modules use explicit interface implementation
     // by declaring this static member as the IHttpModule interface
     // we work around that
     public static IHttpModule Module = new xrnsToashxMappingModule();
     public override void Init()
     {
         base.Init();
         Module.Init(this);
     }
  }

您所做的就是覆盖HttpApplication的Init()方法,然后访问静态实例的Init方法.模块的Init()连接事件,然后关闭.

通过Rick Strahl的博客



2> Nikhil Kotha..:

意识到这是一个老问题,但asp.net 4提供了一些可以在这里提供帮助的新功能.

具体来说,ASP.NET 4提供了一种PreApplicationStartMethod可用于以编程方式添加HttpModule的功能.

我刚刚在http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx上发了一篇博文.

基本思想是创建一个派生HttpApplication,它提供在启动时动态添加HttpModule的能力,然后每当HttpApplication在app-domain中创建每个实例时,它都会将它们初始化为管道.


Blog dead ... wayback link:http://wayback.archive.org/web/20120719043729/http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx

3> Chris van de..:

dll Microsoft.Web.Infrastructure.dll在DynamicModuleUtility类中有一个方法.该DLL随WebPages 1.0一起提供

public static class PreApplicationStartCode
{
    private static bool _startWasCalled;

    public static void Start()
    {
        if (_startWasCalled) return;

        _startWasCalled = true;
        DynamicModuleUtility.RegisterModule(typeof(EventTriggeringHttpModule));
    }
}

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有