我有一个包含AssemblyCatalog和DirectoryCatalog的AggregateCatalog。
我希望他们像这样工作:
我怎样才能达到这样的目标?
答案 0 :(得分:7)
您可以通过将目录放在不同的导出提供程序中,然后按照优先级顺序将导出提供程序传递给CompositionContainer
构造函数来实现第1点和第3点:
var dirCatalog = new DirectoryCatalog(...);
var provider1 = new CatalogExportProvider(dirCatalog);
var assemblyCatalog = new AssemblyCatalog(...);
var provider2 = new CatalogExportProvider(assemblyCatalog);
var container = new CompositionContainer(provider1, provider2);
// link the export providers back to the container, so that they can
// resolve parts from other export providers
provider1.SourceProvider = container;
provider2.SourceProvider = container;
现在您可以像往常一样使用container
,它将首先在目录目录中查找部件,然后在程序集目录中查找。当它们存在时,你不会得到基数异常。
要实现第2点,您必须将单个导入标记为允许使用null
的默认值(例如[Import(typeof(SomeType),AllowDefault=true]
)。