/// <summary>
        /// Gets or create the global selection service.
        /// </summary>
        /// <param name="serviceContainer">The service container in which an instance of the selection service will be added (or retrieved).</param>
        /// <returns>An instance of a class implemenaing <see cref="Delta.CertXplorer.Common.Services.ISelectionService"/>.</returns>
        public static ISelectionService GetOrCreateSelectionService(SCD.IServiceContainer serviceContainer)
        {
            if (serviceContainer == null) throw new ArgumentNullException("serviceContainer");

            var selectionService = serviceContainer.GetService<ISelectionService>();
            if (selectionService == null)
            {
                selectionService = new GlobalSelectionService();
                serviceContainer.AddService<ISelectionService>(selectionService);
            }

            return selectionService;
        }
        /// <summary>
        /// Gets or create the global selection service.
        /// </summary>
        /// <param name="serviceContainer">The service container in which an instance of the selection service will be added (or retrieved).</param>
        /// <returns>An instance of a class implemenaing <see cref="Delta.CertXplorer.Common.Services.ISelectionService"/>.</returns>
        public static ISelectionService GetOrCreateSelectionService(SCD.IServiceContainer serviceContainer)
        {
            if (serviceContainer == null)
            {
                throw new ArgumentNullException("serviceContainer");
            }

            var selectionService = serviceContainer.GetService <ISelectionService>();

            if (selectionService == null)
            {
                selectionService = new GlobalSelectionService();
                serviceContainer.AddService <ISelectionService>(selectionService);
            }

            return(selectionService);
        }
        private void CreateAndBindToSelectionService()
        {
            var service = GlobalSelectionService.GetOrCreateSelectionService(Services);

            service.SelectionChanged += (s, e) =>
            {
                if (service.CurrentSource == this)
                {
                    return;
                }
                if (service.SelectedObject == null)
                {
                    return;
                }
                if (service.SelectedObject == parentObject)
                {
                    return;
                }

                if (service.SelectedObject is CertificateStore)
                {
                    parentObject = service.SelectedObject;
                    var systemStore = (CertificateStore)parentObject;
                    var store       = systemStore.GetX509Store();

                    // See http://msdn.microsoft.com/en-us/library/aa376559%28VS.85%29.aspx : CERT_STORE_PROV_PHYSICAL
                    //var store = new X509Store(systemStore.Name + "\\.Default", systemStore.Location.ToStoreLocation());

                    store.Open(OpenFlags.ReadOnly);

                    CurrentStoreName     = store.Name;
                    CurrentStoreLocation = store.Location;

                    FillList(
                        store.GetCertificates(),
                        store.GetCertificateRevocationLists(),
                        store.GetCertificateTrustLists());
                    store.Close();
                }
            };

            service.AddSource(this);
        }
        private void BindToSelectionService()
        {
            var service = GlobalSelectionService.GetOrCreateSelectionService(Services);

            service.SelectionChanged += (s, e) => propertyGrid.SelectedObject = service.SelectedObject;
        }