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