.Net AOP(五)各種IoCフレームワークの下でAOPを実現
3218 ワード
.Net AOP(五)各種IoCフレームワークの下でAOPを実現
まず筆者がよく見かけるIOCの枠組みをいくつかご紹介します
Unity:マイクロソフトpatterns&practicestチームが開発したIOC依存注入フレームワークは、AOP横断的な注目点をサポートしています.
MEF(Managed Extensibility Framework):拡張用です.NETアプリケーションのフレームワークで、プラグインシステムを開発できます.
Spring.NET:依存注入、指向プログラミング(AOP)、データアクセス抽象、およびASP.NET統合.
Autofac:最もポピュラーな依存注入とIOCフレームワークは、軽量で高性能で、プロジェクトコードにほとんど侵入性がありません.
Ninject:に基づく.NETライト級オープンソースの依存はIOCフレームワークCastleに注入
AOPフレームワーク
EncaseはC#のために開発された.NETプラットフォームが提供するAOPフレームワーク.Encaseは、実行時コードに側面(aspects)を配置し、他のAOPフレームワークがプロファイルに依存する方法を独自に提供しています.この導入(aspects)アプローチは、経験のない開発者が開発効率を向上させるのに役立ちます.NKaloreはプログラミング言語で、C#の許可を拡張しています.NetプラットフォームはAOPを使用しています.NKaloreの文法は簡単で直感的で、そのコンパイラはMono C#コンパイラ(MCS)に基づいている.NKaloreは現在、コマンドラインまたは#Develop内部でのみ使用できます.NKaloreは共通言語規範CLS(Common Language Specification)と互換性があり、任意である.NET開発環境で使用され、マイクロソフトのVisual Studioを含む.NET. PostSharp読み出しNETバイトモジュール、オブジェクトモデルに変換します.プラグインにこのモデルを分析して変換させ、MSILに書き戻します.PostSharpは開発プログラム分析アプリケーションを分析コード規則と設計モデルのように容易にし、プログラム開発の思想を方面向けソフトウェア開発(AODSD/AOD)思想に変革させた.AspectDNGの目標は.NET開発者は、シンプルで強力なAOP-GAOPを実現.JavaのオープンソースツールAspectJとSpoonに倣い、成熟度も近い.RAIL(Runtime Assembly Instrumentation Library)オープンソースプロジェクトは、C#プログラムセットのロードと実行前に処理制御の調整と再構築を行うことができます.C#CLRでは、プログラムセットを動的にロードし、プログラムセットのクラスと方法を得ることができ、RAIL(Runtime Assembly Instrumentation Library)の出現はCLR処理中の空白を埋めた.SetPointは1つです.NETフレーム下のフル機能AOPエンジン.意味接点(semantic pointcuts)と呼ばれる定義がRDF/OWLの使用に依存することに重点を置いている.その機能はIL-level、highly dynamicweaver&LENDLであり、注目される定義言語、、、、、DotNetAOPはCLR languageにAOPフレームワークの基礎属性を提供する.NAopはDotNetの下のAOPフレームワークです.
AspectSharpはDotNetの下にある無料AOPフレームワークで、Dynamic ProxiesとXMLをプロファイルとしています.
Castleの実装
まずCastleをダウンロードします.Windsor.dll
カスタムInterceptor
まず筆者がよく見かけるIOCの枠組みをいくつかご紹介します
Unity:マイクロソフトpatterns&practicestチームが開発したIOC依存注入フレームワークは、AOP横断的な注目点をサポートしています.
MEF(Managed Extensibility Framework):拡張用です.NETアプリケーションのフレームワークで、プラグインシステムを開発できます.
Spring.NET:依存注入、指向プログラミング(AOP)、データアクセス抽象、およびASP.NET統合.
Autofac:最もポピュラーな依存注入とIOCフレームワークは、軽量で高性能で、プロジェクトコードにほとんど侵入性がありません.
Ninject:に基づく.NETライト級オープンソースの依存はIOCフレームワークCastleに注入
AOPフレームワーク
EncaseはC#のために開発された.NETプラットフォームが提供するAOPフレームワーク.Encaseは、実行時コードに側面(aspects)を配置し、他のAOPフレームワークがプロファイルに依存する方法を独自に提供しています.この導入(aspects)アプローチは、経験のない開発者が開発効率を向上させるのに役立ちます.NKaloreはプログラミング言語で、C#の許可を拡張しています.NetプラットフォームはAOPを使用しています.NKaloreの文法は簡単で直感的で、そのコンパイラはMono C#コンパイラ(MCS)に基づいている.NKaloreは現在、コマンドラインまたは#Develop内部でのみ使用できます.NKaloreは共通言語規範CLS(Common Language Specification)と互換性があり、任意である.NET開発環境で使用され、マイクロソフトのVisual Studioを含む.NET. PostSharp読み出しNETバイトモジュール、オブジェクトモデルに変換します.プラグインにこのモデルを分析して変換させ、MSILに書き戻します.PostSharpは開発プログラム分析アプリケーションを分析コード規則と設計モデルのように容易にし、プログラム開発の思想を方面向けソフトウェア開発(AODSD/AOD)思想に変革させた.AspectDNGの目標は.NET開発者は、シンプルで強力なAOP-GAOPを実現.JavaのオープンソースツールAspectJとSpoonに倣い、成熟度も近い.RAIL(Runtime Assembly Instrumentation Library)オープンソースプロジェクトは、C#プログラムセットのロードと実行前に処理制御の調整と再構築を行うことができます.C#CLRでは、プログラムセットを動的にロードし、プログラムセットのクラスと方法を得ることができ、RAIL(Runtime Assembly Instrumentation Library)の出現はCLR処理中の空白を埋めた.SetPointは1つです.NETフレーム下のフル機能AOPエンジン.意味接点(semantic pointcuts)と呼ばれる定義がRDF/OWLの使用に依存することに重点を置いている.その機能はIL-level、highly dynamicweaver&LENDLであり、注目される定義言語、、、、、DotNetAOPはCLR languageにAOPフレームワークの基礎属性を提供する.NAopはDotNetの下のAOPフレームワークです.
AspectSharpはDotNetの下にある無料AOPフレームワークで、Dynamic ProxiesとXMLをプロファイルとしています.
Castleの実装
まずCastleをダウンロードします.Windsor.dll
カスタムInterceptor
public class MyInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
PreProceed(invocation);
invocation.Proceed();
PostProceed(invocation);
}
public void PreProceed(IInvocation invocation)
{
Console.WriteLine(" ");
}
public void PostProceed(IInvocation invocation)
{
Console.WriteLine(" ");
}
}
ユーザー登録インタフェースと実装public interface IUserProcessor
{
void RegUser(User user);
}
public class UserProcessor : IUserProcessor
{
public virtual void RegUser(User user)
{
Console.WriteLine(" 。Name:{0},PassWord:{1}", user.Name, user.PassWord);
}
}
クライアントコールpublic class Client
{
public static void Run()
{
try
{
ProxyGenerator generator = new ProxyGenerator();
MyInterceptor interceptor = new MyInterceptor();
UserProcessor userprocessor = generator.CreateClassProxy<UserProcessor>(interceptor);
User user= new User() { Name = "lee", PassWord = "123123123123" };
userprocessor.RegUser(user);
}
catch (Exception ex)
{
throw ex;
}
}
}