码迷,mamicode.com
首页 > 其他好文 > 详细

MEF 编程指南(十):重组

时间:2014-04-29 23:31:14      阅读:613      评论:0      收藏:0      [点我收藏+]

标签:com   http   blog   style   class   div   code   size   tar   log   c   

有些应用程序被设计成在运行时动态地改变。例如,一个新的扩展可能被下载,或者其他原因变得不可用。MEF 依靠我们称之为重组(Composition)的技术处理,在初始化组合以后改变导入值的场景。

 
导入可以通过 [System.ComponentModel.Composition.ImportAttribute] 使用 Allowrecompostion 属性通知 MEF 支持重组。参考下面的代码:
 
[Export]
public class HttpServerHealthMonitor
{
    [ImportMany(AllowRecomposition=true)]
    public IMessageSender[] Senders { get; set; }
}
 
这告诉 MEF 准备处理重组,如果 IMessageSender 的可用性实现发生变化(要么是一个导入变得可用,要么是一个导入变得不可用),该集合应该改变以反应它。一旦部件选择重组,无论何时改变在目录中改变可用的实现都会收到通知,或者即使实例已经从容器手动添加/移除。
 
 
重组的注意事项(Caveats of Recompostion)
  • 当重组发生的时候,将会用新的实例替换集合中的实例 / 数组,不会更新已经存在的实例。在上例中,如果一个新的 IMessageSender 出现,Sender 将会完全被替换为一个新的数组。这是为了更好的满足线程安全。
  • 重组支持几乎所有类型的导入:字段、属性和集合,但是不支持构造器参数。
  • 如果类型实现了 [System.ComponentModel.Compostion.IPartImportsSatisfiedNotification] 接口,每当发生重组 ImportCompleted 也将会被调用。
 
重组与 Silverlight
 
Silverlight 中重组遵循一个特殊的规则用以支持应用程序分离。获取更多请参考 DeploymentCatalog 主题。 
 
 
原文地址:

MEF 编程指南(十):重组,码迷,mamicode.com

MEF 编程指南(十):重组

标签:com   http   blog   style   class   div   code   size   tar   log   c   

原文地址:http://www.cnblogs.com/JavCof/p/3696800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!