【发布时间】:2010-07-06 18:13:44
【问题描述】:
假设我有这样的 MEF 组合:
public class Composition
{
[ImportMany(AllowRecomposition = true)]
IEnumerable<ILongRunningProcess> Processes { get; set; }
public static void Main(string[] args)
{
var composition = new Composition();
using (var catalog = new DirectoryCatalog("."))
{
using (var container = new CompositionContainer(catalog)
{
container.SatisfyImportsOnce(composition);
//Fire off long running processes in response to stimuli
}
}
}
}
根据我看到的文档,我“在使用重组时必须考虑线程安全。”[MSDN]
显然,对于我删除类型的情况,我需要确保我的长时间运行的进程可以安全地进行垃圾收集。但是对于在重组之前存在并且在重组之后仍然存在的类型,我是否会在重组发生时为 Processes 的内容获取新实例,或者 MEF 是否能够在重组目录时保留现有的导入实例?
根据上面文章的建议,对于ICollection<T>,MEF 将使用Clear() 和Add(T) 方法,我不抱希望,但在编写同步代码之前我想确定一下。
编辑 我刚刚意识到我不能在静态方法中使用this;我已经相应地更新了代码:)
【问题讨论】: