4 mars 2014
2
04
/03
/mars
/2014
20:40
- Permet de « centraliser l’ensemble des services de l’application » (les services du Model)
- Un peu comme le ViewModelLocator qui lui s’occupe du ViewModel
Enregistrement des services :
App.xaml.cs
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); RegisterServices(); RegisterViewModels(); } private void RegisterServices() { ServiceLocator.Instance.Register<IMessenger>(new Messenger()); ServiceLocator.Instance.Register<IArticleService>(new ArticleService()); ServiceLocator.Instance.Register<ICollectionService>(new CollectionService()); ServiceLocator.Instance.Register<IColorService>(new ColorService()); ServiceLocator.Instance.Register<IPhotoService>(new PhotoService()); ServiceLocator.Instance.Register<ISizeService>(new SizeService()); ServiceLocator.Instance.Register<IGenderService>(new GenderService()); ServiceLocator.Instance.Register<ICategoryService>(new CategoryService()); } private void RegisterViewModels() { ViewModelLocator.Register(new ArticleListViewModel()); ViewModelLocator.Register(new ArticleViewModel()); ViewModelLocator.Register(new FilterViewModel()); // . . . } |
Retrouver un service depuis un ViewModel
private IMessenger messenger; private IArticleService articleService; // . . . protected override void InitializeServices() { messenger = ServiceLocator.Instance.Retrieve<IMessenger>(); articleService = ServiceLocator.Instance.Retrieve<IArticleService>(); } |
Utiliser un service .Il est possible ensuite d’utiliser ce même service .
public class ServiceLocator { // Singleton private static readonly ServiceLocator instance = new ServiceLocator(); public static ServiceLocator Instance { get { return instance; } } private Dictionary<Type, object> container = new Dictionary<Type, object>(); public void Register<T>(T element) { container.Add(typeof(T), element); } public T Retrieve<T>() { object item; if (container.TryGetValue(typeof(T), out item)) return (T)item; return default(T); } public void Unregister<T>() { if (container.ContainsKey(typeof(T))) { container.Remove(typeof(T)); } } } |