#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:
Это был мой новичок! Если бы объект выше по графу зависимостей был настроен как одноэлементный, таким образом, зависал на объекте (поставщике соединения), от которого я хотел избавиться в конце каждого запроса! Изменение области видимости этого объекта с одноэлементного на переходный привело к тому, что все начало работать так, как я хотел!