数か月前、私は PostSharp を発見しました。
しかしその後、リーガルは古いバージョンのライセンスが気に入らないという回答を返してきました。その後、部門は 2.0 の価格が (必要な座席数に対して) 受け入れがたいほど高いことを教えてくれました. そのようなフレームワークはこれだけではありえない、と私は思いました。
私は代替品を探し続けましたが、そのほとんどは死んでいるか、メンテナンスが不十分で (特にドキュメンテーション部門で)、学術的な使用のために、または上記のすべてでした (私はあなたの Aspect.Net を見ています)。
その後、Spring.Net を発見しました。しばらくの間、それは良かったです。
私はドキュメンテーションを読んでいて、AOP 涅槃の優れた絵のように見えるものを描き続けました。コード インターセプトを行う場所をマークするために属性にロックされることはなくなりましたが、XML で構成することができ、それを変更しても再コンパイルする必要はありませんでした。偉大な。
次に、サンプルを調べたところ、すべての使用シナリオで次のことがわかりました。
// Create AOP proxy using Spring.NET IoC container.
IApplicationContext ctx = ContextRegistry.GetContext();
ICommand command = (ICommand)ctx["myServiceCommand"];
command.Execute();
if (command.IsUndoCapable)
{
command.UnExecute();
}
コードの最初の 2 行が存在しなければならないのはなぜですか? それはすべてを台無しにします。これは、適切なメソッド/クラス/などに適切な属性を貼り付けたり、XML で一致パターンを編集したりすることによって、ユーザーが使用できるアスペクトと属性のセットまたは XML 構成を単純に提供することはできないことを意味します。これを機能させるには、プログラム ロジックを変更する必要があります。
この場合、Spring.Net を PostSharp として動作させる方法はありますか? (つまり、ユーザーは属性/XML 構成を追加するだけでよく、メソッドのコンテンツを編集する必要はありません。
または、PostSharp に代わる価値のある機能的な代替手段はありますか? SO でこのようなタイトルの質問をいくつか見たことがありますが、実際に PostSharp を置き換えようとしている人はいませんでした。その機能を補完したかっただけです。フル交換が必要です。