我有一个包含大量MEF的应用程序,它一直是导入的。在调试器中,如果设置了Break on Exception,如果找不到某个部件,我可以看到引发的ImportCardinalityMismatchException,它确切地告诉我缺少的导入是什么。但是它被吞没了,我假设是由MEF,并最终弹出一条日志消息告诉我一个不同的组件(可能间接地)依赖于失败的组件。是否有可能在调试器之外掌握原始故障?
答案 0 :(得分:1)
是的,在.NET 4.5中,您可以使用接受CompositionContainer constructor枚举的CompositionOptions重载之一。您需要将DisableSilentRejection
枚举值传递给它。
答案 1 :(得分:0)
.Net 4中的一个解决方案是对导入构造函数的参数使用[Import(AllowDefault = true)]
属性,然后在构造函数体中自己处理/记录失败:
[ImportingConstructor]
public SomeView([Import(AllowDefault = true)] SomeViewModel context)
{
if (context == null)
{
LogManager.GetLogger("Composition").Error("No object found to satisfy import of 'SomeViewModel'");
throw new ArgumetnNullException ("SomeViewModel");
}