Недавно я добавил MEF в приложение MVC/WebAPI, используя различные ресурсы, включая этот ответ SO Как интегрировать MEF с ASP.NET MVC 4 и веб-API ASP.NET. Хотя это работало какое-то время, я начал получать периодические ошибки, связанные с подключением к базе данных, наиболее частая из которых: «System.InvalidOperationException: Timeout expired. Период ожидания истек до получения подключения из пула. Это может произошло из-за того, что все соединения в пуле использовались и был достигнут максимальный размер пула».
Я понял, что пропускаю соединения, но не понял, почему. Все мои репозитории реализовали IDisposable и удалили свои соединения, когда это было сделано. Установка точек останова в моих методах удаления быстро показало, что они никогда не срабатывали. Когда я основывал свой код на примере, указанном выше, я заметил отсутствие какой-либо очистки, но будучи новичком в MEF и MVC, я ошибочно предположил, что очистка выполняется где-то в конвейере зависимостей MVC/MEF.
Мне интересно, как другие люди справились с использованием MEF, чтобы правильно определить композицию для каждого запроса как в MVC, так и в WebAPI?
Я нашел расплывчатые указания здесь и там, и все они ориентированы либо на MVC, либо на WebAPI. Mef.codeplex имеет почти полное решение, ориентированное на MVC, здесь: https://mef.codeplex.com/releases/view/79090, но он основан на предварительной версии MVC. Я нашел решение WebAPI здесь: https://github.com/WebApiContrib/WebApiContrib.IoC.Mef а>. В данный момент я обкатываю свое собственное решение, но, поскольку я ненавижу изобретать колесо, я подумал, что попрошу узнать, знает ли кто-нибудь об одном из них, который уже вращается.