我正在开发一个应用程序,它使用 MEF 插入外部设备(I/O 设备、示波器、波形发生器等)的接口。大多数这些接口都需要 DLL 来访问设备,如果可能,我会将这些 DLL 打包到包含插件的项目中。
应用程序用于ImportMany
加载所有实现插件接口的类。然后用户可以选择需要哪些接口。
我有一个界面,这给我带来了困难。我无法识别所有依赖项,当我在另一个工作站上启动应用程序时,我得到一个未解决的依赖项错误。我敢肯定,当我安装所有驱动程序并支持 DLL 时,它会正常工作。
但是,并非所有用户都需要使用这个特定的界面,我不想在所有工作站上安装所有驱动程序。我正在寻找一种在某些 MEF 插件无法加载时优雅降级的方法。一条日志消息足以说明无法加载界面。只有那些试图使用接口函数的人才会得到错误。
这是我的加载程序代码:
try
{
var catalog = new AggregateCatalog();
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
catalog.Catalogs.Add(new AssemblyCatalog(typeof (Pruef.Net.TgtManager.TargetManager).Assembly));
container.Compose(batch);
_targets = _targets.OrderBy(t => t.DisplayName);
}
catch (Exception x)
{
log.Error(x);
}