C#の------ MEF

参照

参照

MEFは、マネージド拡張フレームワークの略で拡張性の高い、軽量なアプリケーションを作成するためのライブラリです。開発者は、アプリケーション間で拡張検索および拡張に使用するMEFを使用することができますが、設定する必要はありませんが、また、再利用することができます。拡張アプリケーションは、大規模なアプリケーションアーキテクトの問題は考慮しなければならないです。前のソリューションは、通常、設定ファイル、および達成するために、界面反射技術を使用しています。そして、MEFは、発見コンポーネントを介して暗黙的にする方法を提供します。(「インポート」と呼ばれる)宣言同時に依存関係を特定MEF成分(「エクスポート」と称する)は、その機能を提供します。MEFは、.NET Framework 4のの不可欠な部分である、.NET Frameworkの初期のバージョンでは、管理対象アドインの枠組み(MAF)を導入 、 拡張を隔離し、管理するためのアプリケーションを有効にするために設計されています。MEFよりも僅かに高いレベルにMAFの焦点は、それがロードおよびアンロードの単離およびアセンブリの拡大に焦点を当て、そしてMEFを見つけ、拡張性および移植性に焦点を当てています。両方のフレームワークをスムーズに相互運用することができ、単一のアプリケーションプログラムが、同時にこれらの2つのフレームを使用することができます。

本論文では、簡単なテストMEF、
最初の新しいコンソールプロジェクトを作成し、MEFの枠組みへの参照を追加し、両方のSystem.ComponentModel.Composition.dllし、次のコードを入力します。

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.ComponentModel.Compositionを。
使用してSystem.ComponentModel.Composition.Hostingを。
使用してSystem.Linqのを。
使用するSystem.Reflectionを。
使用してSystem.Textのを。
使用してSystem.Threading.Tasksを。

名前空間MEFDemo 
{ 
    クラスプログラム
    { 
        // 导入对象使用 
        [インポート(" chinese_hello " )]
         パブリック者oPerson { セット取得; } 

        [インポート("TestProperty " )]
         パブリック 文字列 ConsoleTest { 得る ; セット;} 

        [インポート(" ActionTest " )]
         パブリックアクション< ストリング > TestActionImport { セット取得;} 

        [インポート(" FuncTest " )]
         公共のFunc < ストリング > TestFuncImport { セット取得}; 

        [インポート(" FuncTestvalueを" )]
         公共のFunc <文字列文字列 > TestFuncImport2 { セット取得; }
         // 多参数
        // 公共のFunc <文字列、文字列、文字列> TestFuncImport2 {セット。取得する; } 
        静的 ボイドメイン(文字列[]引数)
        { 
            VARの oProgram = 新しいプログラム()。
            oProgram.MyComposePart(); 
#ifの// 测试一
            VAR strRes = oProgram.oPerson.SayHello(" 李磊" ); 
            Console.WriteLineを(strRes)。
           
#endifの
#ifの/// /テスト二 
            oProgram.TestActionImport(" ジム"); // 戻り値の
            するvar A = oProgram.TestFuncImport(); // 値を返す
            のvar(B = oProgram.TestFuncImport2 " 引数を渡すことはできませんが"); // 値パラメータ渡し返すことができる
             // Console.WriteLineを(A)を、
            Console.WriteLineを(B);
 #endifの
            Console.Read(); 
        } 
        // MEF体組成物とホスト
        空隙MyComposePartを()
        { 
            // Assembly.GetExecutingAssembly() :現在の方法どこアセンブリ
             //Assembly.GetCallingAssembly():アセンブリの現在の方法は、メソッド呼び出し
            のvarカタログ= 新しい新しいAssemblyCatalog(Assembly.GetExecutingAssembly());
             VARのコンテナ= 新しい新しいCompositionContainer(カタログ);
             // ホストプログラムおよび組成物に成分(パート)を追加容器 
            container.ComposeParts(この); 
        } 
    } 
    パブリック クラスTestPropertyImport 
    { 
        [エクスポート(" TestProperty " )]
         パブリック 文字列 TestMmport { GET { リターン " テストプロパティをインポートおよびエクスポートすることができます" ;}}

        [エクスポート(" ActionTest "typeof演算(アクション< 文字列 > ))]
         公共 ボイド TestAction(文字列名)
        { 
            Console.WriteLineを(" こんにちは:" + 名)。
        } 

        [エクスポート(" FuncTest "typeof演算(機能< ストリング > ))]
         パブリック 文字列  TestFunc()
        { 
            リターン " こんにちは:" + " 1111" ; 
        } 
        [エクスポート(" FuncTestvalue " typeof演算(機能< 文字列文字列 > ))]
         パブリック 文字列 TestFuncValue(名)
        { 
            リターン " こんにちは:" + 名; 
        } 
    } 
    // 声明对象可以导出 
    [エクスポート(" chinese_hello "typeof演算(人))]
     パブリック クラス中国:人
    { 
        公共の 文字列sayHello(文字列名)
        { 
            リターン " 你好:" + 名。
        } 
    } 
    [エクスポート(" american_hello "typeof演算(人))]
     パブリック クラス:アメリカ人
    { 
        パブリック 文字列のsayHello(名)
        { 
            リターン " こんにちは:" + 名。
        } 
    } 
    パブリック インターフェイス
    { 
        ストリングのsayHello(名); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/macT/p/11290535.html