.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
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;
            }
        }
    }