我试图让开发人员在某些执行点扩展我的代码。
我的具体示例是数据库事务包装器。包装器负责处理我们希望从开发人员那里抽象出来的许多细节,并用于多个项目。
然而,每个项目都有他们希望在交易期间自动执行的某些事情。我想添加每个项目可以设置以运行代码的拦截点。
例如,我们数据库中的每个表都有一个输入日期字段,每次记录更改时都会更新该字段。然而,我们希望一个事务的所有日期都是相同的,无论有多少记录被触及(即表 A 中的 4 条记录,表 B 中的 1 条记录,...)。
我的想法是定义拦截点“TransactionStarting”、“TransactionStarted”、“StatementExecuting”、“StatementExecuted”……并将一个上下文对象传递给每个点。
然后项目可以定义一个类“EnteredDateManager”,它在“TransactionStarted”点期间存储当前日期,并在“StatementExecuting”点期间更新每个对象的 EnteredDate 属性。
我想在 web/app.config 文件中进行设置,并允许注册多个拦截类。如果注册了多个班级,则应按照注册的顺序解雇他们。
我想只是提出事件,但我希望秩序很重要。我还希望能够在不同点之间共享状态。在我上面的示例中,EnteredDate 属性在 TransactionStarted 点中设置并在 StatementExecuting 点中使用。
这是责任链模式吗?奥普?它似乎接近 ASP.Net 管道的工作方式,但据我所知,它们使用事件并且不保证排序。
任何方向/例子都会很棒。
谢谢