IOCフレームワーク
- ユニティ:マイクロソフトのパターン&practicestチームは懸念を横断的AOPをサポートIOC依存性注入フレームワークを開発しました。
- MEF(拡張フレームワーク管理):.NETアプリケーションのための拡張可能なフレームワークは、プラグインシステムを開発することができます。
- Spring.NET:依存性注入、アスペクト指向プログラミング(AOP)、抽象データアクセス,,とASP.NETの統合。
- Autofac:最も人気のあるIOCと依存性注入フレーム、プロジェクトコードの軽量かつ高いパフォーマンスがほとんど侵襲的ではありません。
- Ninject:IOCは、オープンソースの.NET依存関係に基づいて、軽量フレームワークを注入し
AOPフレームワーク
- 城
- 包み込むは、 .NETプラットフォーム用に開発されたC#のAOPフレームワークで書かれています。包む別のAOPフレームワークプロファイル依存的ながら、ランタイムコードに展開固有の側面(アスペクト)を提供します。開発効率を向上させるために経験の少ない開発者を支援するための方法のこの展開(側面)。
- NKaloreは C#.NETプラットフォームはでAOPの使用を可能に延びているプログラミング言語です。NKaloreの構文は、そのコンパイラは、モノC#コンパイラ(MCS)に基づいており、直感的、簡単です。現在、コマンドラインまたは#Developの使用内部のみNKalore。マイクロソフトのVisual Studio .NETを含む、任意の.NET開発環境で使用することができる共通言語仕様CLS(共通言語仕様)と互換性NKalore。
- PostSharpは バイト.NETモジュールを読んで、オブジェクトモデルに変換されます。モデル解析と変換プラグインおよびMSILに書き戻さましょう。PostSharp解析コードのルールやデザインパターンのように簡単などの開発プロセスは、分析アプリケーションは、それがプログラム開発アスペクト指向ソフトウェア開発(AOSD / AOD)の変更のアイデアを作ると思いました。
- AspectDNGの 目標は、.NET開発者として実装シンプルかつ強力なAOP-GAOPを提供することです。これは、オープンソースツールの下にAspectJのJavaをエミュレートし、スプーン、成熟度も非常に近い彼らにあります。
- RAIL(計装組立ランタイムライブラリ)のオープンソースプロジェクトが処理され、調整がロードして実行するC#のアセンブリの前に再構築制御することができます。C#CLRでは、我々は動的にアセンブリをロードして、アセンブリのクラスとメソッドを取得する能力を持っている、RAIL(ランタイムアセンブリ計装ライブラリ)CLR過程でいくつかのギャップを埋めるように見えました。
- 設定値が .NETフレームワークの下で完全に機能する(多機能)AOPエンジンである。これは非常に、IL-レベルの関数であるの接線(セマンティックポイントカット)RDF / OWLの使用に依存して定義されているの意味焦点と呼ばれダイナミックな織工&レンドル、魅力的な定義言語,,,,,,
- DotNetAOPは、 CLR言語の基本的な性質のためのAOPフレームワークを提供します。
- NAOPは AOPフレームワークの下で過去ログです。
- AspectSharpは、コンフィギュレーションファイルとして過去ログ、その動的プロキシとXMLの下で自由AOPフレームワークです。
城の実現
// 最初のダウンロードCastle.Windsor.dll // カスタムインターセプタ パブリック クラスmyInterceptor:IInterceptor { 公共 ボイドインターセプト(IInvocation呼び出し) { PreProceed(呼び出し); invocation.Proceed(); PostProceed(呼び出し); } 公共 ボイドPreProceed(IInvocation呼び出し) { Console.WriteLineを(" 実行方法の前に" ); } 公共 ボイドPostProceed(IInvocation呼び出し) { Console.WriteLineを("メソッドを実行した後「); } } // ユーザ登録インタフェースと実装 パブリック インターフェースIUserProcessor { ボイドRegUser(ユーザーのユーザー); } パブリック クラスUserProcessor:IUserProcessor { パブリック 仮想 ボイドRegUser(ユーザーユーザー) { Console.WriteLineを(」登録ユーザ。.nameの:{0}、パスワード:{} 1 」、user.name、user.password); } } // クライアントが呼び出す パブリック クラスのクライアント { パブリック 静的の 無効ファイル名を指定して実行() { 試み { ProxyGenerator発電機 = 新ProxyGenerator(); MyInterceptorインターセプター = 新しいMyInterceptor(); UserProcessor userprocessor = generator.CreateClassProxy <UserProcessor> (インターセプター)。 ユーザのユーザ = 新しいユーザー(){NAME = " イ"、PASSWORD = " 123123123123 " }。 userprocessor.RegUser(ユーザ)。 } キャッチ(例外例) { スローEXを。 } } }