私は、.NET Frameworkを.NET Coreにターゲティングするコードを移植しようとしていますが、その一部はMEF1からMEF2に切り替えることを含みます。 .NETコアでMEFを使用することについては、多くの文書がないようで、は、MEF1と同様にの部分をフィルタリングする方法を示す例は見つかりません。MEF2の部品をどのようにフィルタリングできますか?
元のコード(MEF1を使用しています)では、MockCommunicationService
を除き、アセンブリのセットからエクスポートされたすべての部品をロードしたかったのです。私はこれを次のように実装しました:
// Filter out invalid exports.
Func<ComposablePartDefinition, bool> partFilter = it => !it.ToString().Contains(nameof(MockCommunicationService));
var assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var catalog = new DirectoryCatalog(assemblyPath).Filter(partFilter);
var container = new CompositionContainer(catalog);
これはMEF2と同じでしょうか?私はそれがおそらくConventionBuilder
を使用することを含むと想像しますが、 "x以外のすべてを許可する"という行に沿って規約を定義する方法があるかどうかはわかりません。
理想的には、このようなものは素晴らしいことだ:
var conventions = new ConventionBuilder();
conventions.ForType<MockCommunicationService>().SuppressExports();
var configuration = new ContainerConfiguration()
.WithAssemblies(assemblies, conventions);