런타임에 HttpModules를 프로그래밍 방식으로 등록
저는 타사 공급업체가 플러그인 DLL을 작성하여 웹 앱의 bin 디렉터리에 넣을 수 있는 앱을 만들고 있습니다.필요한 경우 이러한 플러그인이 자체 HttpModules를 등록할 수 있는 기능을 원합니다.
웹에 해당 항목이 없어도 런타임에 파이프라인에 HttpModules를 추가하거나 제거할 수 있는 방법이 있습니까?구성 또는 웹을 프로그래밍 방식으로 편집해야 합니까?모듈을 추가/제거할 때 구성하시겠습니까?어느 쪽이든 AppDomain을 다시 시작하게 될 것이라는 것은 알고 있지만, 동일한 효과를 얻기 위해 web.config를 조작하는 것보다는 코드로 다시 시작할 수 있었으면 합니다.
HttpApplication 개체가 초기화되는 HttpApplication 수명 주기에서 적절한 시간에 수행해야 합니다(HttpApplication의 각 인스턴스에 여러 번, 한 번).이 방법이 올바르게 작동하는 유일한 방법은 HttpApplicationInit()입니다.
코드를 통해 모듈을 연결하려면 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()는 이벤트를 연결하고 종료합니다.
이것은 오래된 질문이지만 asp.net 4는 여기에 도움이 될 수 있는 몇 가지 새로운 기능을 제공합니다.
구체적으로 ASP.NET 4는 다음을 제공합니다.PreApplicationStartMethod
HttpModules를 프로그래밍 방식으로 추가하는 데 사용할 수 있는 기능입니다.
저는 방금 http://www.nikhilk.net/Config-Free-HttpModule-Registration.aspx 에 블로그 글을 올렸습니다.
기본적인 생각은 당신이 파생된 것을 만든다는 것입니다.HttpApplication
시작 시 HttpModules를 동적으로 추가할 수 있는 기능을 제공하고, 매번 파이프라인으로 초기화합니다.HttpApplication
인스턴스가 app-domain 내에 생성됩니다.
dll Microsoft.Web.Infrastructure.dll에는 DynamicModuleUtility 클래스 내에 이 메서드가 있습니다.dll은 웹 페이지 1.0과 함께 제공됩니다.
public static class PreApplicationStartCode
{
private static bool _startWasCalled;
public static void Start()
{
if (_startWasCalled) return;
_startWasCalled = true;
DynamicModuleUtility.RegisterModule(typeof(EventTriggeringHttpModule));
}
}
ASP MVC의 새 버전에서는 Package Manager를 사용하여 WebActivatorX에 대한 참조를 추가한 다음 다음과 같은 작업을 수행할 수 있습니다.
using WhateverNameSpacesYouNeed;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(YourApp.SomeNameSpace.YourClass), "Initialize")]
namespace YourApp.SomeNameSpace
{
public static void Initialize()
{
DynamicModuleUtility.RegisterModule( ... the type that implements IHttpModule ... );
}
}
이것은 동적 등록에 효과가 있었습니다.
RegisterModule(typeof(RequestLoggerModule));
public class RequestLoggerModule : IHttpModule
{ ... }
언급URL : https://stackoverflow.com/questions/239802/programmatically-register-httpmodules-at-runtime
'programing' 카테고리의 다른 글
passport.js RESTful 인증 (0) | 2023.07.30 |
---|---|
데이터 프레임의 각 열에 있는 비-NaN 항목 수 (0) | 2023.07.30 |
잘못된 조합의 데이터 정렬 및 최대 절전 모드 (0) | 2023.07.30 |
고급 MySql 쿼리: 다른 테이블의 정보로 테이블 업데이트 (0) | 2023.07.30 |
MySQL에서 어떤 조합을 선택해야 합니까? (0) | 2023.07.30 |