我有一个MEF(Microsoft扩展框架)应用程序,它从文件夹加载一些程序集.我需要枚举为我的应用程序生成任何导出的程序集.
一种方法是枚举导入调用GetExportedObject().GetType().Assembly
.但如果没有实例化进口,这样做会更干净.有没有办法从目录或其他任何东西获取加载的程序集?
我需要程序集来获取他们的属性,如版权,版本,名称等.我的文件夹可以包含带导出和没有导出的程序集,但我只需要满足应用程序中任何导入的程序集.
这是一种方法,用于Caliburn.Micro:
var aggregateCatalog = new AggregateCatalog(...);
var assemblies = aggregateCatalog.Parts
.Select(part => ReflectionModelServices.GetPartType(part).Value.Assembly)
.Distinct()
.ToList();
Run Code Online (Sandbox Code Playgroud)
AssemblyCatalog 有一个 Assembly 属性。AggregateCatalog 无法直接获取此信息 - 无法保证内部目录甚至从装配中加载其零件。DirectoryCatalog 没有此功能,但如果有充分的理由,可以添加它。
为什么要获取程序集列表?您可能最好不要使用目录目录,而是自己扫描并加载目录中的程序集,为每个程序集创建一个 AssemblyCatalog 并将其添加到 AggregateCatalog 中。
编辑:MEF 无法获取组合中“使用”的所有导出的列表。您可能可以编写自己的目录,该目录将返回部件定义,这些定义是默认部件定义周围的外壳,并跟踪哪些部件调用了 GetExportedObject。您可以使用 ReflectionModelServices 中的 API 来确定哪种类型对应于默认目录中的给定零件定义。请注意,编写这样的目录可能不是一件简单的事情。
归档时间: |
|
查看次数: |
4667 次 |
最近记录: |