| @@ -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
