##// END OF EJS Templates
minor fixes in the service locator class
cin -
r87:79badb3ed195 v2
parent child
Show More
@@ -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