Перехватчик возвращает объект типа IWorker
, у которого есть код для прохождения через ваш перехватчик, который выполняет регистрацию.На самом деле ничто не редактирует код в классе A
для перехвата, ведения журнала и т. Д. Поскольку указанный код вызывает методы в том же классе A
, то есть this
, перехватчик, введенный вами в вызов IWorker
, никогда не будеткоснулся во время этих вложенных вызовов.
Чтобы наблюдать это, попробуйте напечатать worker.GetType()
(или наблюдать тип в отладчике) и обратите внимание, что он не будет иметь тип A
.
Это может быть примером принципа единой ответственности, в котором реализации вашего интерфейса не должны вызывать вещи для объекта this
, потому что это может привести к поломке регистрации и модульному тестированию.Если вы не можете переварить свое решение в отдельные интерфейсы, вы можете рассмотреть вопрос о том, чтобы сделать запрос на реализацию свойством интерфейса того же типа и вызвать , что .