@@ -165,7 +165,6 namespace Implab { | |||||
165 | /// <typeparam name="T">Тип регистрируемого сервиса.</typeparam> |
|
165 | /// <typeparam name="T">Тип регистрируемого сервиса.</typeparam> | |
166 | /// <param name="activator">Фабрика для создания/получения объекта, предоставляющего сервис.</param> |
|
166 | /// <param name="activator">Фабрика для создания/получения объекта, предоставляющего сервис.</param> | |
167 | /// <param name = "cleanup">Метод для освобождения экземпляра сервиса, будет вызыван при освобождении сервис-локатора.</param> |
|
167 | /// <param name = "cleanup">Метод для освобождения экземпляра сервиса, будет вызыван при освобождении сервис-локатора.</param> | |
168 | /// <exception cref="InvalidOperationException">Указанный сервис уже зарегистрирован.</exception> |
|
|||
169 | /// <remarks>При освобождении сервис-локатора, сервисы полученные в результате активации также будут освобождены.</remarks> |
|
168 | /// <remarks>При освобождении сервис-локатора, сервисы полученные в результате активации также будут освобождены.</remarks> | |
170 | public void Register<T>(Func<T> activator, Action<T> cleanup) { |
|
169 | public void Register<T>(Func<T> activator, Action<T> cleanup) { | |
171 | Safe.ArgumentNotNull(activator, "activator"); |
|
170 | Safe.ArgumentNotNull(activator, "activator"); | |
@@ -196,12 +195,11 namespace Implab { | |||||
196 | } |
|
195 | } | |
197 |
|
196 | |||
198 | /// <summary> |
|
197 | /// <summary> | |
199 | /// Регистрирует объект, предоставляющий сервис. |
|
198 | /// Регистрирует объект, предоставляющий сервис. Повторная регистрация отменяет уже существующую. | |
200 | /// </summary> |
|
199 | /// </summary> | |
201 | /// <typeparam name="T">Тип регистрируемого сервиса.</typeparam> |
|
200 | /// <typeparam name="T">Тип регистрируемого сервиса.</typeparam> | |
202 | /// <param name="service">Объект, предоставляющий сервис.</param> |
|
201 | /// <param name="service">Объект, предоставляющий сервис.</param> | |
203 | /// <param name="shared">Признак того, что объект является разделяемым и сервис-локатор не должен его освобождать.</param> |
|
202 | /// <param name="shared">Признак того, что объект является разделяемым и сервис-локатор не должен его освобождать.</param> | |
204 | /// <exception cref="InvalidOperationException">Указанный сервис уже зарегистрирован.</exception> |
|
|||
205 | public void Register<T>(T service, bool shared) { |
|
203 | public void Register<T>(T service, bool shared) { | |
206 | Safe.ArgumentNotNull(service, "service"); |
|
204 | Safe.ArgumentNotNull(service, "service"); | |
207 |
|
205 | |||
@@ -219,9 +217,12 namespace Implab { | |||||
219 |
|
217 | |||
220 | ServiceEntry se; |
|
218 | ServiceEntry se; | |
221 | if (m_services.TryGetValue(serviceType, out se)) { |
|
219 | if (m_services.TryGetValue(serviceType, out se)) { | |
|
220 | if (se.origin != null) { | |||
|
221 | var pe = m_services[se.origin]; | |||
|
222 | pe.associated.Remove(serviceType); | |||
|
223 | } | |||
222 | // освобождаем ресурсы |
|
224 | // освобождаем ресурсы | |
223 | if (se.service != null && !se.shared) |
|
225 | se.Dispose(); | |
224 | ((IDisposable)se.service).Dispose(); |
|
|||
225 | m_services.Remove(serviceType); |
|
226 | m_services.Remove(serviceType); | |
226 |
|
227 | |||
227 | // убираем связанные записи |
|
228 | // убираем связанные записи |
General Comments 0
You need to be logged in to leave comments.
Login now