2

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

private IEventAggregator eventAggregator;

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

我从这篇文章中读到 ServiceLocator.Current 可以抛出 NullReferenceException (构造函数上的坏事)但我想知道 GetInstance<>() 方法是否可以返回 null (或其他一些不一致的对象)使得 eventAggregator 以后在其他方法中使用很危险.

注意:我对 MVVM 和 WPF 很陌生

4

1 回答 1

1

如果服务定位器为空,则可能存在未正确设置统一的内容。在正常情况下,恕我直言,这应该不是问题。

话虽如此,我倾向于使用稍微不同的方式来访问服务定位器。

例如,如果我有一个名为 MyClass 的类,我将使用统一依赖注入来传递服务定位器(也称为统一中的容器)。而且我倾向于使用unity的Resolve功能而不是GetInstance,但是它们是一样的。

也有人说服务定位器是一种反模式,但我不认同这种想法。 http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx

例子

public MyClass(IUnityContainer container)
{
    var ea = container.Resolve<IEventAggregator>();
}
于 2012-07-06T03:14:05.043 回答