我想知道使用Import/ImportMany装饰物有什么好处?我和MEF一起玩,并通过CompositionContainer管理所有事情。我使用派生自ExportAttribute的自定义MetaDataAttribute来装饰出口。当我尝试访问插件实例时,我可以通过Container.GetExports<T, IMetaDataAttribute>()
懒洋洋地访问元数据和插件实现。托管扩展性框架(MEF),为什么需要导入?
那么,我为什么需要进口的装饰打扰?我明白MEF的核心是CompositionContainer,而这正是我应该关心的。但是网上的大多数例子都通过导入装饰对象实例。为什么是这样,他们提供什么附加价值?
下面是我如何访问我的元数据和实际的插件的例子:
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;
}
我缺少的东西或缺乏了解?请帮助我理解。因为他们为您提供自动的依赖注入
这就是为什么我很困惑。鉴于人们知道'GetExport',我没有看到使用Imports的任何优势。相反,Imports会引入额外的代码中断和其他类的机会。另外,在与Container相同的类中使用导入时,无法将包装类设置为静态,这基本上意味着必须传递插件管理器的引用而不是使用静态类。当然,导入可以放在一个单独的类中,并在静态PluginManager类中实例化并存储为ref。在任何情况下,我仍然看不到Imports如何帮助我。 – 2013-05-10 12:18:48
我看到你的观点重新加入了插件之间的依赖关系,我想这就是将Unity和MEF这样的东西结合起来的地方。谢谢你的解释 – 2013-05-10 12:21:47