2016-08-29 28 views
0
IObjectVmFactory objectVMFactory = this.Container.Resolve<IObjectVmFactory>(); 

这将引发NullReferenceException。赋值生成System.NullReferenceException

如果我没有的this.Container.Resolve结果赋值给一个变量,它不会抛出:

this.Container.Resolve<IObjectVmFactory>().AnyMethod(...) 

这有没有意义的我...有人可以给我一些解释?

的额外信息:

this.Container不为空肯定的。三重检查。如果它为空,则第二行将失败。

实施IObjectVmFactory的类没有定义的构造函数,所以在IObjectVmFactory实现中没有发生异常。

该异常没有内部异常,并直接指向第一行。

直接在Inmediate Window上执行该行会生成一个(''为空)消息。

谢谢!

+2

第一个是'this.Container.Resolve ();'第二个是'this.Container.Resolve ()。CreateInstance(...)'。你的代码本身解释说,第一个没有创建它的实例,而第二个是。因此它是自我解释的。 – ViVi

+0

你确定'Container'不是'null'吗? 'NullReferenceException'从哪里来? – Haukinger

+0

第一个是创建一个IObjectVmFactory的实例,第二个也是唯一的区别是,在第一种情况下,我通过一个变量将统一解析的实例赋值。容器是好的,不是空的。 –

回答

0

我的项目的配置是在发布,而不是调试。在发布模式下,它会在分配中引发异常。在调试时,它抛出了赋值之后的步骤:

Foo member { get; } 
public Bar(Foo foo) 
{ 
    // crashes here on release 
    member = foo; 

    // crashes here in debug (foo.Collection was null) 
    foreach (var thing in foo.Collection) 
     thing.DoSomething(); 
} 

因此,看起来像在项目的配置释放可能会导致错误。尝试切换配置以进行调试并找到失败的位置。

选择Build - >配置管理器

选择项目

变化从发布的配置,调试。

构建并查看错误是否发生在同一地点。