我最近使用各种资源将MEF添加到MVC/WebAPI应用程序,包括这个答案如何将MEF与ASP.NET MVC 4和ASP.NET Web API集成.虽然这工作了一段时间,但我开始收到与连接数据库相关的间歇性错误,最常见的错误是:"System.InvalidOperationException:Timeout expired.在从池中获取连接之前经过了超时时间.这可能是之所以发生,是因为所有汇集的连接都在使用中,并且达到了最大池大小."
我意识到我正在泄漏连接,但不明白为什么.我的所有存储库都实现了IDisposable并在完成时处理了它们的连接.在我的配置方法中加入断点很快就会发现它们永远不会被击中.当我将代码基于链接到上面的示例时,我注意到没有任何清理,但是对MEF和MVC不熟悉我错误地认为清理是在MVC的/ MEF的依赖管道中的某个地方完成的.
我想知道其他人如何在MVC和WebAPI中使用MEF来解决每个请求的合理范围?
我已经在这里和那里找到了模糊的指导,它们都面向MVC或WebAPI.Mef.codeplex在这里有一个几乎完整的MVC中心解决方案:https://mef.codeplex.com/releases/view/79090 但它基于MVC的预览版本.我在这里找到了一个WebAPI解决方案:https://github.com/WebApiContrib/WebApiContrib.IoC.Mef.我现在正在推出自己的解决方案但是由于我不想重新发明轮子,我想我会问是否有人知道有一个已经滚动.
在没有找到任何令我满意的东西之后,我最终在假日期间自己解决了这个问题.CodePlex的MEF贡献有一个良好的开端,但尚未完成.我将其与一些修改合并,并将其与一些研究和反复试验相结合.
我在Github上创建了一个项目(链接如下,我知道外部链接不受欢迎,但是包含内联的代码太多了).这是四个项目.第一个提供核心组合和拆解,两个库分别将核心放入MVC和WebAPI的上下文中,最后一个只是一个带有两个控制器的快速示例MVC应用程序,每个控制器依赖于另一个注入的类.有一点需要注意,我认为WebAPI项目尚未完成,因为它尚未包含WebAPI过滤器提供程序的设施(也许还有其他我尚未想到或尚未完成的事情).
我希望这有帮助.
https://github.com/rlvandaveer/Heliar-Web-Composition