通过MEF中的ExportMetadata属性导入对象

本文关键字:导入 对象 属性 ExportMetadata MEF 中的 通过 | 更新日期: 2023-09-27 17:49:55

我想问一下,是否可以通过ExportMetadata值导入一些对象?例如:string。或如果我通过名称和类型声明了一些Export对象,我能通过类型导入它们吗?

通过MEF中的ExportMetadata属性导入对象

您需要通过LazyExportFactory推迟部件的创建。例如,给定我的样本类型:

[Export(typeof(ILogger)), ExportMetadata("Name", "Console")]
public class ConsoleLogger : ILogger
{
}

我需要一个元数据接口:

public interface INamedMetadata
{
  string Name { get; }
}

然后我可以导入许多实例:

[ImportMany(typeof(ILogger))]
IEnumerable<Lazy<ILogger, INamedMetadata>> Loggers { get; set; }

并选择:

public ILogger GetLogger(string name)
{
  return Loggers
    .Where(l => l.Metadata.Name.Equals(name))
    .Select(l => l.Value)
    .FirstOrDefault();
}