我想知道 Import/ImportMany 装饰有什么用?我使用 MEF 并通过 CompositionContainer 管理一切。我使用派生自 ExportAttribute 的自定义 MetaDataAttribute 修饰了导出。当我尝试访问插件实例时,我可以通过Container.GetExports<T, IMetaDataAttribute>()
.
那么,为什么我需要打扰进口装饰呢?我知道 MEF 的核心是 CompositionContainer,这才是我真正应该关心的。但是网络上的大多数示例都通过 Import 修饰的对象实例。为什么会这样?它们提供了什么附加值?
这是我如何访问元数据和实际插件的示例:
public static IEnumerable<IPluginAttributeView> GetMetaData<T>()
{
return Container.GetExports<T, IPluginAttributeView>().Select(e => e.Metadata);
}
public static T GetPlugin<T>(string pluginName) where T : class
{
var plugins = Container.GetExports<T, IPluginAttributeView>();
var pluginByName = plugins.Where(e => e.Metadata.PluginName.Equals(pluginName)).FirstOrDefault();
return pluginByName.Value;
}
我错过了什么或缺乏理解吗?请帮我理解。