Я пытаюсь перенести некоторый код из таргетинга .NET Framework в .NET Core, а часть этого включает переход от MEF1 к MEF2. По-видимому, не существует большой документации по использованию MEF в .NET Core, и я не могу найти примеров, демонстрирующих, как отфильтровать, как это было возможно с помощью 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);