我想问一下,是否可以通过ExportMetadata值导入一些对象?例如,字符串。 要么 如果我按名称和类型声明了一些Export对象,我可以只通过键入?
来导入所有这些对象答案 0 :(得分:3)
您需要通过Lazy
或ExportFactory
推迟创建零件。例如,鉴于我的样本类型:
[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();
}