StructureMap ReleaseAndDisposeAllHttpScopedObjects не вызывает вызовов Dispose

#asp.net-mvc-3 #inversion-of-control #ioc-container #structuremap

#asp.net-mvc-3 #инверсия управления #ioc-контейнер #structuremap

Вопрос:

Я вызываю ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects() в Application_EndRequest, который запускается, как и ожидалось, однако это не приводит к удалению каких-либо экземпляров в Http-области внутри контейнера. Если я вызываю WhatDoIHave в Application_EndRequest , я вижу экземпляры с Http-областью, для которых я хочу вызвать Dispose, но этого не происходит! Есть идеи, почему бы и нет?

Когда я смотрю в HttpContext.Current.Элементы StructureMap ничего там не спрятал, и я предполагаю, что это должно быть? Пример элемента, зарегистрированного для области запроса, выглядит следующим образом:

 For<IConnectionProvider>().HybridHttpOrThreadLocalScoped().Use<ConnectionProvider>();
  

IConnectionProvider наследует от IDisposable.

Ответ №1:

Это был мой новичок! Если бы объект выше по графу зависимостей был настроен как одноэлементный, таким образом, зависал на объекте (поставщике соединения), от которого я хотел избавиться в конце каждого запроса! Изменение области видимости этого объекта с одноэлементного на переходный привело к тому, что все начало работать так, как я хотел!