コア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 => " 蠢狗" 。} } }