在运行时检测MEF程序集

aat*_*que 3 c# mef

我有一个包含许多.dll的目录,其中一些是MEF插件,我正在使用它加载DirectoryCatalog- 例如:

var catalog = new DirectoryCatalog(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Run Code Online (Sandbox Code Playgroud)

这会将执行目录的主机上的所有程序集加载到目录中.但是,我希望只建立一个MEF组件目录(即可组合部件).

有没有办法检测MEF组件?

Wim*_*nen 6

那些没有MEF部件的组件对其没有任何影响 DirectoryCatalog.Parts,因此MEF已经为您进行了检测.

如果您认为扫描MEF部件的所有部件对性能的影响太大,那么您可以使用搜索模式来过滤DLL名称,如下所示:

var catalog = new DirectoryCatalog(
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
    "*.plugins.dll");
Run Code Online (Sandbox Code Playgroud)

  • @aateeque:仍然不应该导致异常,至少不仅仅是因为目录编目包含没有MEF部分的程序集.虽然第一次调用它,`GetExports`*会导致枚举所有程序集中的类型,如果你有不可加载的类型,可能会导致`ReflectionTypeLoadException`.但这并不是MEF特有的问题.它通常只是意味着您的构建文件夹中有一个已停用的程序集,它引用了不再存在的类型.这就是我问你得到什么样的例外的原因. (2认同)