あなたは別の輸出プロバイダでカタログを入れて、その後、このような優先度の高い順にCompositionContainer
コンストラクタに輸出プロバイダを渡すことによって、ポイント1と3を達成することができます
var dirCatalog = new DirectoryCatalog(...);
var provider1 = new CatalogExportProvider(dirCatalog);
var assemblyCatalog = new AssemblyCatalog(...);
var provider2 = new CatalogExportProvider(assemblyCatalog);
var container = new CompositionContainer(provider1, provider2);
// link the export providers back to the container, so that they can
// resolve parts from other export providers
provider1.SourceProvider = container;
provider2.SourceProvider = container;
今、あなたは使用することができます通常はcontainer
であり、ディレクトリカタログの最初の部分、アセンブリカタログの2番目の部分を探します。カーディナリティー例外が両方に存在する場合、それらは例外になりません。
ポイント2を達成するには、デフォルト値(null
)と[Import(typeof(SomeType),AllowDefault=true]
を使用できるように個別のインポートをマークする必要があります。
[コンポーネントをMEFに置き換える](http://greenicicleblog.com/2010/07/19/replacing-components-with-mef/)を参照してください.MEFを変更して輸出の優先順位付けを行う方法について説明しています – Terkel
@Simon Bang Terkildsenありがとう、私はこのブログを見てきました。カスタマイズされたカタログと属性が必要ですが、私はより簡単な方法を探しています。 – CuiPengFei