Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles RÉCents

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));
            }
        }
    }

 

Partager cet article
Repost0

commentaires