【问题标题】:What is the purpose of a Service Locator in a Silverlight MVVM app?Silverlight MVVM 应用程序中服务定位器的用途是什么?
【发布时间】:2009-02-05 00:13:47
【问题描述】:

我正在尝试为我的 MVVM Silverlight 应用程序整合所有部分,并且我看到一些博客涉及服务定位器。

什么是服务定位器,什么时候应该使用它?

【问题讨论】:

    标签: silverlight mvvm


    【解决方案1】:

    我已将 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 拉入视图的。

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

    【讨论】:

      【解决方案2】:

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

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

      查看 CodePlex 托管的 Common Service Locator

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多