根據MEF Preview 9源代碼(可能與.NET 4中提供的代碼密切匹配),CompositionContainer
將把目錄封裝在CatalogExportProvider
中。此導出提供程序存儲在一個字段中,並與容器一起處理。然而,CatalogExportProvider.Dispose
將而不是依次處置包裹ComposablePartCatalog
。
因此答案是否定的:CompositionContainer
不配置目錄。
您可以通過運行該代碼,這將不再打印到控制檯驗證這一點:
class MyCatalog : ComposablePartCatalog
{
protected override void Dispose(bool disposing)
{
Console.WriteLine("Disposed!");
base.Dispose();
}
public override IQueryable<ComposablePartDefinition> Parts
{
get { throw new NotImplementedException(); }
}
}
class Program
{
static void Main(string[] args)
{
var container = new CompositionContainer(new MyCatalog());
container.Dispose();
Console.ReadKey();
}
}
啊!創建自定義子類技術:)我的反射器副本耗盡,這是一個星期五,所以貼在SO上。謝謝Wim! – Gishu 2011-04-16 14:45:39