Silverlight MVVM应用程序中服务定位器的用途是什么?

时间:2009-02-05 00:13:47

标签: silverlight mvvm

我正在尝试将所有部分放在一起用于我的MVVM Silverlight应用程序,我看到一些博客涉及服务定位器。

什么是服务定位器以及何时应该使用它?

2 个答案:

答案 0 :(得分:13)

我已将ServiceLocator与MVVM结合使用,以启用从View到ViewModel的声明性绑定。

ServiceLocator是基于拉式的,而IoC容器是基于推送的。例如:

如果你使用IoC容器,你可能会创建这样的东西:

public MyViewModel(IDataRepository repository)
{
}

IoC容器将在构造对象时将IDataRepository实例推送到对象中。

如果您使用ServiceLocator,通常会编写如下代码:

public MyViewModel()
{
    _repository = ServiceLocator.Instance.DataRepository;
}

因此,在这种情况下,ViewModel从ServiceLocator中提取IDataRepository接口的实例。

ServiceLocator可能由IoC容器支持(但不是必需的)。

这样做的好处是您可以将ServiceLocator作为资源添加到App.xaml文件中,然后从视图中以声明方式访问它。

<UserControl 
    DataContext="{Binding Path=MyViewModel, 
                  Source={StaticResource serviceLocator}}">...</UserControl>

MyViewModel可能由IoC容器创建,但它使用数据绑定和ServiceLocator进入View。

我的博客上有blog post about Dependency Injection, IoC and ServiceLocators in a Silverlihgt/MVVM context

答案 1 :(得分:1)

服务定位器是一种类似于依赖注入的设计模式。

它允许消费者针对接口而不是具体类进行编程。

查看CodePlex上托管的Common Service Locator