PurchTotals "переопределить" можно, другое дело, что это нужно делать "иногда". Подобные места все чаще приходится лечить с помощью
Option 3. Disposable context, в данном случае: где-то вышле по стеку создать singleton-"флажок", а где-то ниже, скажем, в постобработчике создания PurchTotals, по флажку подпихивать класс-пустышку вместо реального класса расчета итогов. Но выглядит это все очень извратно на фоне нормальных ветвлений в коде, которые можно было делать прежде.