Mercurial > pub > ImplabNet
comparison Implab/ServiceLocator.cs @ 87:79badb3ed195 v2
minor fixes in the service locator class
| author | cin |
|---|---|
| date | Mon, 06 Oct 2014 18:11:23 +0400 |
| parents | b33832ab0262 |
| children | c4877ae77cee |
comparison
equal
deleted
inserted
replaced
| 86:b33832ab0262 | 87:79badb3ed195 |
|---|---|
| 163 /// Регистрирует фабрику для активации сервиса по первому требованию. | 163 /// Регистрирует фабрику для активации сервиса по первому требованию. |
| 164 /// </summary> | 164 /// </summary> |
| 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"); |
| 172 | 171 |
| 173 AssertNotDisposed(); | 172 AssertNotDisposed(); |
| 194 public void Register<T>(T service) { | 193 public void Register<T>(T service) { |
| 195 Register(service, true); | 194 Register(service, true); |
| 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 |
| 208 AssertNotDisposed(); | 206 AssertNotDisposed(); |
| 209 | 207 |
| 217 | 215 |
| 218 AssertNotDisposed(); | 216 AssertNotDisposed(); |
| 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 // убираем связанные записи |
| 228 if (se.associated != null) | 229 if (se.associated != null) |
| 229 foreach (var item in se.associated) | 230 foreach (var item in se.associated) |
