我可以阻止吞下ImportCardinalityMismatchException吗?

时间:2014-03-27 15:02:26

标签: mef

我有一个包含大量MEF的应用程序,它一直是导入的。在调试器中,如果设置了Break on Exception,如果找不到某个部件,我可以看到引发的ImportCardinalityMismatchException,它确切地告诉我缺少的导入是什么。但是它被吞没了,我假设是由MEF,并最终弹出一条日志消息告诉我一个不同的组件(可能间接地)依赖于失败的组件。是否有可能在调试器之外掌握原始故障?

2 个答案:

答案 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");
        }