MEF IOCコンテナ

コアMEFは、カタログやCompositionContainerを含んでいます。拡張を発見するためのカテゴリ、およびソート依存を作成し、調整するための容器。パートは、一つ以上の輸出の組み合わせごとに設けられており、通常、1つまたは複数のインポートのサービスに依存しているか、外部から供給されます。各パートの管理は、アプリケーションの1つのインスタンスを実行します。

MEF会員の発見は、以下の3つの方法が用意されています。

現在のアセンブリで見つかっ①AssemblyCatalog部材。

指定されたディレクトリで見つかったDirectoryCatalog部品②。

③DeploymentCatalogは、指定したファイルにXAPのメンバーを発見しました。

歴史的な理由のために、MEFは、2つのバージョンを持っています。一つはSystem.ComponentModel.CompositionのFramworkです。

一つはNugetパッケージ(このサポートネットコア)System.Compositionです

さんがネットコアMEFコンテナの使用を実証してみよう

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Compositionを。
使用してSystem.Composition.Conventionを。
使用してSystem.Composition.Hostingを。
使用してOldModelを。
使用してNewModelを。

名前空間NewMEF 
{ 
    クラスプログラム
    { 
        静的な 無効メイン(文字列[] argsを)
        { 
            VARの規則= 新しいConventionBuilder(); 
            conventions.ForTypesDerivedFrom。<IDog>()エクスポート<IDog> ().Shared(); 

            VaRのアセンブリ= 新しいです[] { typeof演算(IDog).Assembly}。
            VaRの設定= 新しいContainerConfiguration()WithAssemblies(アセンブリ、規則)。

            使用VARのコンテナ= configuration.CreateContainer())
            { 
                VARのプラグインは=のcontainer.GetExports <IDog> ();
                foreachのVARのアイテムプラグイン)
                { 
                    Console.WriteLineを(" 名:{0} " 、item.Name)。
                } 
            } 
            Console.ReadKey()。
        }
    }
}
使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Textのを。
使用してSystem.Compositionを。

名前空間OldModel 
{ 
    パブリック インターフェイスIDog 
    { 
      文字列の名前{ 取得します} 
    } 

    [エクスポート(typeof演算(IDog))]
     パブリック クラスFatDog:IDog 
    { 
        パブリック 文字列名=> " !肥狗" 
    } 
    
    [エクスポート(typeof演算(IDog))]
     パブリック クラスStupidDog:IDog
    { 
      文字列 IDog.Name { GET => " 蠢狗" } 
    } 
    

}

 

おすすめ

転載: www.cnblogs.com/luoluoluoD/p/10937358.html