ServiceLocator.Current.GetInstance可以返回null吗?

时间:2012-07-05 22:51:35

标签: c# wpf mvvm nullreferenceexception service-locator

我在许多观点中都有这段代码(或类似代码):

private IEventAggregator eventAggregator;

Constructor()
{
    eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
    ...
}

我从this帖子中读到,ServiceLocator.Current可以抛出NullReferenceException(构造函数上的坏东西),但我想知道GetInstance&lt;&gt;()方法是否可以返回null(或其他一些不一致的对象) eventAggregator在以后的其他方法中使用会很危险。

注意:我是MVVM和WPF的新手

1 个答案:

答案 0 :(得分:1)

如果servicelocator为null,那么可能没有正确设置统一的东西。在正常情况下,这不应该成为一个问题。

话虽如此,我倾向于使用稍微不同的方式来到servicelocator。

例如,如果我有一个名为MyClass的类,我将使用统一依赖注入来传递servicelocator(也称为统一容器)。我倾向于使用Unity的Resolve功能而不是GetInstance,但它们是相同的。

还有人说服务主机是一个反模式,但我不会接受这种思路。 http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx

例如

public MyClass(IUnityContainer container)
{
    var ea = container.Resolve<IEventAggregator>();
}