编程语言
首页 > 编程语言> > c#-使用MEF Preview 5导入具有特定元数据的零件

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方法.

标签:mef,c
来源: https://codeday.me/bug/20191210/2103034.html