Как правило, если вы хотите обеспечить прозрачное управление поведением во многих различных классах, лучше всего использовать AOP. Часто AOP может быть настроен через DI / IoC, поэтому эти два не являются взаимоисключающими. Без точного понимания, какую технологию вы используете, я не могу дать более конкретного совета, чем этот. В Java, например, я бы использовал DI-фреймворк, такой как Spring, в сочетании с AspectJ, чтобы настроить это. Я не уверен, что эквивалентные технологии в .NET.
Имейте в виду, что вы заплатите штраф за производительность, если внедрите поведение во многие мелкозернистые объекты в своем приложении, поэтому вы можете подумать, стоит ли использовать эту функцию для снижения производительности. К счастью, одним из преимуществ AOP является то, что вы можете довольно легко включить / отключить pointcut, что позволит вам измерить разницу в производительности.