我正在为我在工作中开发的一些网站开发一个有点高级的自定义框架,并且我正在为它实现一个小型插件系统。例如,我想以某种方式在 ASPX 文件中注册插件,以便在我的 Page_Init 函数中按顺序调用它们之后挂钩到不同的页面事件(Load、PreRender 等)。我将直接跳转到代码,以便您了解我想要做什么:
<%@ 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 事件等中相应地采取行动。
任何想法都非常感谢:)。提前致谢!