Я пытаюсь разрешить разработчикам расширять мой код в определенных точках исполнения.
Мой конкретный пример - оболочка транзакции базы данных. Оболочка заботится о многих деталях, которые мы хотели абстрагировать от разработчика, и используется в нескольких проектах.
Однако у каждого проекта есть определенные вещи, которые они хотели бы делать автоматически во время транзакции. Я хотел бы добавить точки перехвата, которые каждый проект может настроить для запуска кода.
Например, каждая таблица в нашей базе данных имеет поле «Дата ввода», которое обновляется при каждом изменении записи. Однако мы хотим, чтобы все даты были одинаковыми для транзакции, несмотря на то, что было затронуто много записей (то есть 4 записи таблицы A, 1 запись в таблице B, ...).
Моя мысль состоит в том, чтобы определить точки перехвата "TransactionStarting", "TransactionStarted", "StatementExecuting", "StatementExecuted", ... и передать объект контекста в каждую точку.
Затем проект может определить класс «EnteredDateManager», который хранит текущую дату во время точки «TransactionStarted» и обновляет свойство EnteredDate каждого объекта во время точки «StatementExecuting».
Я хотел бы установить это в файле web / app.config и разрешить регистрацию нескольких классов перехвата. Если зарегистрировано более одного класса, их следует запускать в том порядке, в котором они были зарегистрированы.
Я думал просто о возбуждении событий, но я хочу, чтобы порядок имел значение. Я также хочу иметь возможность поделиться состоянием между различными точками. В моем примере выше свойство EnteredDate установлено в точке TransactionStarted и используется в точке StatementExecuting.
Это шаблон Цепочки Ответственности? АОП? Это похоже на работу конвейера ASP.Net, но, насколько я знаю, они используют события и не гарантируют порядок.
Было бы замечательно любое направление / примеры.
Спасибо