我正在尝试将所有作品放在一起用于我的MVVM Silverlight应用程序,并且我看到一些博客触及了服务定位器。Silverlight MVVM应用程序中的服务定位器的用途是什么?
什么是服务定位器,何时应该使用它?
我正在尝试将所有作品放在一起用于我的MVVM Silverlight应用程序,并且我看到一些博客触及了服务定位器。Silverlight MVVM应用程序中的服务定位器的用途是什么?
什么是服务定位器,何时应该使用它?
我已经使用ServiceLocator和MVVM结合,从视图到ViewModel启用声明式绑定。
ServiceLocator是基于拉的,而IoC容器是基于推送的。例如:
如果使用IoC容器,你可能会创建这样的事:
public MyViewModel(IDataRepository repository)
{
}
的IoC容器将推动IDataRepository实例到对象而构建的。
如果你使用一个服务定位器,你通常会这样写代码:
public MyViewModel()
{
_repository = ServiceLocator.Instance.DataRepository;
}
因此,在这种情况下,视图模型是拉动从服务定位的IDataRepository接口的实例。
ServiceLocator可能由IoC容器支持(但不是必需的)。
这样做的好处是您可以将ServiceLocator作为资源添加到您的App.xaml文件,然后从视图声明性地访问它。
<UserControl
DataContext="{Binding Path=MyViewModel,
Source={StaticResource serviceLocator}}">...</UserControl>
的MyViewModel可能被IoC容器被创建,但它的使用数据绑定和服务定位拉入视图。
我有一个blog post about Dependency Injection, IoC and ServiceLocators in a Silverlihgt/MVVM context在我的博客。
>博客链接不起作用;可能想检查链接。 – atconway 2010-11-02 14:57:31