# HG changeset patch # User cin # Date 1412665118 -14400 # Node ID c4877ae77cee283c6d29af0718bab276f09aa91b # Parent 79badb3ed1950cb021161335d0bd3fab40395ff6 ServiceLocator: fixed services cleanup diff -r 79badb3ed195 -r c4877ae77cee Implab/ServiceLocator.cs --- a/Implab/ServiceLocator.cs Mon Oct 06 18:11:23 2014 +0400 +++ b/Implab/ServiceLocator.cs Tue Oct 07 10:58:38 2014 +0400 @@ -20,13 +20,11 @@ public void Dispose() { if (shared) return; - if (cleanup != null) - cleanup(service); - else { - var d = service as IDisposable; - if (d != null) - d.Dispose(); - } + if (cleanup != null) { + if (service != null) + cleanup(service); + } else + Safe.Dispose(service); } #endregion @@ -173,10 +171,11 @@ Unregister(typeof(T)); - m_services[typeof(T)] = new ServiceEntry { - activator = () => activator(), - cleanup = instance => cleanup((T)instance) - }; + var serviceEntry = new ServiceEntry(); + serviceEntry.activator = () => activator(); + if (cleanup != null) + serviceEntry.cleanup = instance => cleanup((T)instance); + m_services[typeof(T)] = serviceEntry; } public void Register(Func activator) {