Предостережение: это не обычный способ использования MEF.Но так как вы спросили ... вы можете использовать перегрузку GetExports , которая принимает ImportDefinition .
Чтобы узнать, какое имя контракта вы должны использовать для данного типаВы можете позвонить AttributedModelServices.GetContractName(typeof(IPlugin))
.Обычно это просто полное имя типа.
Точный тип метаданных не важен - все, что имеет значение, - это свойства метаданных, объявленные для него.Вы можете описать их как в словаре requiredMetadata
ниже.
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
string contractName = "SomeNamespace.IPlugin";
var requiredMetadata = new Dictionary<string, Type>();
requiredMetadata["Meta1"] = typeof(string);
requiredMetadata["Meta2"] = typeof(int);
var importDefinition = new ContractBasedImportDefinition(
contractName,
null,
requiredMetadata,
ImportCardinality.ZeroOrMore,
false,
true,
CreationPolicy.Any);
var exports = container.GetExports(importDefinition);
Console.WriteLine(exports.Count());
Console.ReadKey();