# HG changeset patch
# User cin
# Date 1412604683 -14400
# Node ID 79badb3ed1950cb021161335d0bd3fab40395ff6
# Parent  b33832ab02623f75e705ad81641eaab0635014c4
minor fixes in the service locator class
diff -r b33832ab0262 -r 79badb3ed195 Implab/ServiceLocator.cs
--- a/Implab/ServiceLocator.cs	Mon Oct 06 03:41:17 2014 +0400
+++ b/Implab/ServiceLocator.cs	Mon Oct 06 18:11:23 2014 +0400
@@ -165,7 +165,6 @@
         /// Тип регистрируемого сервиса.
         /// Фабрика для создания/получения объекта, предоставляющего сервис.
         /// Метод для освобождения экземпляра сервиса, будет вызыван при освобождении сервис-локатора.
-        /// Указанный сервис уже зарегистрирован.
         /// При освобождении сервис-локатора, сервисы полученные в результате активации также будут освобождены.
         public void Register(Func activator, Action cleanup) {
             Safe.ArgumentNotNull(activator, "activator");
@@ -196,12 +195,11 @@
         }
 
         /// 
-        /// Регистрирует объект, предоставляющий сервис.
+        /// Регистрирует объект, предоставляющий сервис. Повторная регистрация отменяет уже существующую.
         /// 
         /// Тип регистрируемого сервиса.
         /// Объект, предоставляющий сервис.
         /// Признак того, что объект является разделяемым и сервис-локатор не должен его освобождать.
-        /// Указанный сервис уже зарегистрирован.
         public void Register(T service, bool shared) {
             Safe.ArgumentNotNull(service, "service");
 
@@ -219,9 +217,12 @@
             
             ServiceEntry se;
             if (m_services.TryGetValue(serviceType, out se)) {
+                if (se.origin != null) {
+                    var pe = m_services[se.origin];
+                    pe.associated.Remove(serviceType);
+                }
                 // освобождаем ресурсы
-                if (se.service != null && !se.shared)
-                    ((IDisposable)se.service).Dispose();
+                se.Dispose();
                 m_services.Remove(serviceType);
 
                 // убираем связанные записи