仕事で開発しているいくつかの Web サイト用に、やや高度なカスタム フレームワークに取り組んでおり、そのための小さなプラグイン システムを実装しています。たとえば、Page_Init 関数でプラグインを順番に呼び出した後、さまざまなページ イベント (Load、PreRender など) にフックできるように、何らかの形で ASPX ファイルにプラグインを登録したいと考えています。コードに直接ジャンプして、私が何をしたいかを確認します。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Plugin TypeName="MyFramework.Plugin.Core" Arg1="arg1" Arg2="arg2" %>
<%@ Plugin TypeName="MyFramework.Plugin.MainMenu" Arg1="arg1" Arg2="arg2" %>
<%@ Plugin TypeName="MyFramework.Plugin.IE6Hacks" Arg1="arg1" Arg2="arg2" %>
<%@ Plugin TypeName="MyFramework.Plugin.Footer2015" Arg1="arg1" Arg2="arg2" %>
<%@ Plugin TypeName="MyFramework.Plugin.SortableGridViews" Arg1="arg1" Arg2="arg2" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title>blah</title>
</head>
<body>
<form id="form1" runat="server"> Blah... </form>
</body>
</html>
それらの<% Plugin %>
ディレクティブを参照してください。それらは ASP.NET には存在しませんが、作成したいと考えています。この件に関しては、グーグルで何も見つかりません。カスタムを作成することは可能ですか?
私の考えは、それらがそれらのディレクティブに「登録」されると、それらすべて (ディレクティブがヒットするたびに配列に格納されるか、Page_Init イベントで格納される) をループして、それに応じて動作できるということです。
私が持っていた別のアイデアは、代わりにコードブロックを使用することでした:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<% RegisterPlugin("MyFramework.Plugin.Core"); %>
<% RegisterPlugin("MyFramework.Plugin.MainMenu"); %>
<% RegisterPlugin("MyFramework.Plugin.IE6Hacks"); %>
<% RegisterPlugin("MyFramework.Plugin.Footer2015"); %>
<% RegisterPlugin("MyFramework.Plugin.SortableGridViews"); %>
<!DOCTYPE html>
<html>
<head runat="server">
<title>blah</title>
</head>
<body>
<form id="form1" runat="server"> Blah... </form>
</body>
</html>
しかし、関数はすべてのページ イベントの前に (または少なくとも Page_Load の前に) 実行されるのではなく、すべてのページ イベントの後に呼び出されるため、基本ページの Page_Load イベントなどで適切に動作するためにプラグインが登録されているかどうかを検出する方法がありません。
どんなアイデアでも本当に感謝しています:)。前もって感謝します!