2016-08-29 59 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 - >配置管理器

選擇項目

變化從發佈的配置,調試。

構建並查看錯誤是否發生在同一地點。