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

时间:2011-04-10 14:19:23

标签: c# mef

我想问一下,是否可以通过ExportMetadata值导入一些对象?例如,字符串。 要么 如果我按名称和类型声明了一些Export对象,我可以只通过键入?

来导入所有这些对象

1 个答案:

答案 0 :(得分:3)

您需要通过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();
}