【发布时间】:2012-07-06 09:41:31
【问题描述】:
在我们的许多观点中,我都有这段代码(或类似的):
private IEventAggregator eventAggregator;
Constructor()
{
eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
...
}
我从this 帖子中读到,ServiceLocator.Current 可以抛出 NullReferenceException(构造函数上的坏事),但我想知道 GetInstance() 方法是否可以返回 null(或其他一些不一致的对象),从而使 eventAggregator 对稍后在其他方法中使用。
注意:我对 MVVM 和 WPF 很陌生
【问题讨论】:
-
从技术上讲,如果 ServiceLocator.Current 为 Null,您将无法调用 .GetInstance
() 方法,因为您将收到 Object not set to an instance of an object异常。 -
在获得一些经验后,在单元测试中调用代码时可能会发生 ServiceLocator.Current 可以为 null 的情况。在这种情况下,服务定位器可能尚未初始化(即可能未调用负责它的代码)。一种解决方法是模拟它(我使用了 MOQ 库),但只是为了测试存在服务定位器但我们对此不感兴趣的特定代码。
标签: c# wpf mvvm nullreferenceexception service-locator