MEF也拥有直接存取的应用程序接口,但是大多数情况下VB或c#都需要Import/Export属性模式。MEF完整的可扩展性使得它可以在其他情境中使用,包括动态语言,外部定义和候补发现机制。
到此,我们已经跳过了基数和生命周期的重要问题。当你将Import属性放在单独项目中时,要表述你需要单独项目。如果不匹配或找到多个匹配,那么标准的MEF容器配置会抛出一个异常情况。
_
Private textToDisplay As ITextToDisplay
如果你预先知道会出现多个匹配的情况,就能够输入一个IEnumerable或一个ExportCollection。如果不想有异常抛出或找不到匹配结果时,可以设置Import属性中的AllowDefault参数值为True。如果不知道匹配结果的数量,要将Import放到集合中并将正确实例加入代码中。
生命周期是指输出的单独实例是否用于所有请求,或新创建的实例是否用于每个请求。你要申明生命周期使用的是Export属性的 CreationPolicy参数或Import属性中的RequiredCreationPolicy。默认的创建政策是Any,而如果Export和 Import属性都具备可用于Any的CreationPolicy,其结果是共享实例。如果CreationPolicies冲突,MEF会抛出异常。这可以让你细致而灵活地控制实例创建过程。
MEF可以赋予你创建高度解耦型应用程序的能力,这样的程序支持客户扩展,粒度开发和优秀的编程设计,是程序员的好帮手。