Какова цель поиска службы в приложении Silverlight MVVM? - PullRequest
4 голосов
/ 05 февраля 2009

Я пытаюсь собрать все части для своего приложения MVVM Silverlight, и я вижу, что некоторые блоги касаются локаторов служб.

Что такое сервисный локатор и когда его следует использовать?

Ответы [ 2 ]

13 голосов
/ 05 февраля 2009

Я использовал ServiceLocator в сочетании с MVVM, чтобы разрешить декларативное связывание из View в ViewModel.

ServiceLocator основан на извлечении, а контейнеры IoC - на принудительной отправке. Например:

Если вы используете контейнер IoC, вы, вероятно, создадите что-то вроде этого:

public MyViewModel(IDataRepository repository)
{
}

Контейнер IoC будет помещать экземпляр IDataRepository в объект при его создании.

Если вы используете ServiceLocator, вы обычно пишете такой код:

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

Таким образом, в этом случае ViewModel извлекает экземпляр интерфейса IDataRepository из ServiceLocator.

ServiceLocator может поддерживаться контейнером IoC (но не обязательно).

Преимущество этого состоит в том, что вы можете добавить ServiceLocator в качестве ресурса в файл App.xaml, а затем декларативно получить к нему доступ из представлений.

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

MyViewModel может быть создан контейнером IoC, но он загружается в представление с использованием привязки данных и ServiceLocator.

В моем блоге опубликовано сообщение о внедрении зависимостей, IoC и ServiceLocators в контексте Silverlihgt / MVVM .

1 голос
/ 05 февраля 2009

Сервисный локатор - это шаблон проектирования, похожий на внедрение зависимостей.

Позволяет потребителю программировать с использованием интерфейса, а не конкретного класса.

Взгляните на Common Service Locator , размещенный на CodePlex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...