Page クラスの実装へ処理を委譲する

ono さんのところは tips を定期的に仕入れるのに非常に便利。基本的な内容のものが多いので、紹介されているものをそのまま使うのではなく、色々と応用をするのが良いかんじのものが良くピックアップされています。

そんなところで、dotnetfan.org - このウェブサイトは販売用です! -&nbspdotnetfan リソースおよび情報 で紹介されている Loading an ASP.NET Page Class dynamically in an HttpHandler - Rick Strahl's Web Log なんですが、私なら以下のようにします。

public class TestHandlerFactory : IHttpHandlerFactory
{
    IHttpHandler IHttpHandlerFactory.GetHandler(
                        HttpContext context, string requestType, string url, string pathTranslated)
    {
        // virtual path
        const string TargetVirtualPath = "~/schedulerTest.aspx";

        // rewrite context info
        // context.RewritePath();

        return PageParser.GetCompiledPageInstance(TargetVirtualPath, 
            context.Server.MapPath(TargetVirtualPath), context);
    }

    void IHttpHandlerFactory.ReleaseHandler(IHttpHandler handler)
    {
        // nothing do
    }
}

与えられた URL やクエリ情報などにあわせ、呼び出される実装を切り替えるなどが可能なのも一緒です。必要に応じて RewritePath() も行う必要があると思いますが、需要次第なのでとりあえずコメントにしておきました。

Page クラスに限定されないので、他のハンドラ類へ委譲することもできますし、Page クラスに限定されるならば GetCompiledPageInstance() の戻り値を Page クラスなどにキャストしてプロパティ類を変更することも可能です。