Предположим, у меня есть такая композиция 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 в статическом методе; Соответственно обновил код :)