J'ai utilisé ServiceLocator en combinaison avec MVVM pour activer la liaison déclarative de View à ViewModel.
Le ServiceLocator est basé sur le pull alors que les conteneurs IoC sont basés sur le push. Par exemple:
Si vous utilisez un conteneur IoC vous allez créer probablement quelque chose comme ceci:
public MyViewModel(IDataRepository repository)
{
}
Le conteneur IoC poussera l'instance IDataRepository dans l'objet tout en construisant.
Si vous utilisez un ServiceLocator vous généralement écrire du code comme ceci:
public MyViewModel()
{
_repository = ServiceLocator.Instance.DataRepository;
}
Donc, dans ce cas, le ViewModel tire une instance de l'interface IDataRepository du ServiceLocator.
Le ServiceLocator peut être pris en charge par un conteneur IoC (mais pas nécessaire). L'avantage de cela est que vous pouvez ajouter le ServiceLocator en tant que ressource à votre fichier App.xaml, puis y accéder de manière déclarative à partir des vues.
<UserControl
DataContext="{Binding Path=MyViewModel,
Source={StaticResource serviceLocator}}">...</UserControl>
Le MyViewModel peut être créé par un conteneur IoC, mais il est tiré dans la vue en utilisant la liaison de données et un ServiceLocator. Je possède un blog post about Dependency Injection, IoC and ServiceLocators in a Silverlihgt/MVVM context sur mon blog.
> Le lien du blog ne fonctionne pas; peut vouloir vérifier le lien. – atconway
J'ai mis à jour le lien vers l'article en question :) –