c#-使用MEF Preview 5导入具有特定元数据的零件
作者:互联网
我在MEF预览5中定义了如下导出
[ExportMetadata("Application", "CheckFolderApplication")]
[Export(typeof(ExtendedArtifactBase))]
public class CheckFolderArtifact2 : ExtendedArtifactBase
{ ...
然后,我只想要带有“应用程序”“ CheckFolderApplication”元数据的导入.为了做到这一点,我先阅读所有导入内容,然后过滤结果.
[Import(typeof(ExtendedApplicationBase))]
private ExportCollection<IApplication> _applications { get; set; }
public IApplication GetApplication(string applicationName)
{
return _applications.Single(a => a.GetExportedObject().Name == applicationName).GetExportedObject();
}
感觉真的很低效.如果我有成千上万个插件,我是否必须通过MEF读取它们才能获得具有正确元数据的插件?如果是这样,您如何缓存结果?
解决方法:
是的,在这种情况下,您将必须自己进行过滤.
要缓存结果,您可以将其存储在另一个私有变量中.如果要支持重组(必须将import属性的AllowRecomposition属性设置为true),则可以在您的类上实现IPartImportsSatisfiedNotification,并且只要设置了导入,就将调用接口的OnImportsSatisfied方法.