あなたは、既存のコードベースを変更せずに機能を追加するという、同じことを意図した 3 つのテクノロジーを挙げました。
ASP.NET MVC と DI はどちらも、アスペクト (名前付きフィルターまたはインターセプター) を持つことができる場所に制限を設けています。これは、テクノロジがコードを編集できないため、一部の場所でのみ動作を追加できるためです。PostSharp などのコンパイラ ベースのテクノロジだけが、あらゆる場所にアスペクトを追加することができます。ただし、3 つすべてが AOP の概念の実装です。
アスペクトは、多くのユースケースで、従来のオブジェクト指向プログラミングよりも優れていることが証明されています。同じコストでより良い設計の従来の OOP ですべての問題を解決できるというのは真実ではありません。ただし、AOP が主流ではなく、主流ではないテクノロジの使用に関連するコストとリスクがあることは正しいです (AOP は 90 年代に生まれ、OOP は 60 年代に生まれました)。あらゆるイノベーションと同様に、さまざまなアクターはリスクとメリットに対する感受性が異なるため、アーリー アダプターまたはレイト アダプターになる可能性があります。
AOP は単体テストの障害にはなりませんが、このトピックに関する共有経験はほとんどありません。一般に、アスペクトは個別のコード単位としてテストする必要があります。本質的な側面とそうでない側面があります。通常、ビジネス コードは重要な側面と一緒にテストする必要がありますが、重要でない側面は無効にする必要があります。ビルド時に静的にアスペクトを無効にする (ビルド構成から一部のアスペクトを除外するだけ)、または実行時にアスペクトを無効にする (テスト中に false に設定した静的変数にアスペクトを依存させる) ことができます。