我最近使用各种资源(包括此 SO 答案)将 MEF 添加到 MVC/WebAPI 应用程序如何将 MEF 与 ASP.NET MVC 4 和 ASP.NET Web API 集成 https://stackoverflow.com/questions/13566688/how-to-integrate-mef-with-asp-net-mvc-4-and-asp-net-web-api/19326535#19326535。虽然这工作了一段时间,但我开始收到与建立数据库连接相关的间歇性错误,最常见的错误是:“System.InvalidOperationException:超时已过期。从池中获取连接之前超时时间已过。这可能是发生这种情况是因为所有池连接都在使用中并且达到了最大池大小。”
我意识到我正在泄漏连接,但不明白为什么。我的所有存储库都实现了 IDisposable 并在完成后释放它们的连接。在我的处理方法中放置断点很快发现它们从未被击中。当我基于上面链接的示例编写代码时,我注意到缺少任何清理,但作为 MEF 和 MVC 的新手,我错误地认为清理是在 MVC/MEF 的依赖管道中的某个地方完成的。
我想知道其他人如何使用 MEF 在 MVC 和 WebAPI 中根据每个请求正确确定组合范围?
我到处都找到了模糊的指导,它们都是针对 MVC 或 WebAPI 的。 Mef.codeplex 在这里有一个几乎完整的以 MVC 为中心的解决方案:https://mef.codeplex.com/releases/view/79090 https://mef.codeplex.com/releases/view/79090但它基于 MVC 的预览版本。我在这里找到了一个WebAPI解决方案:https://github.com/WebApiContrib/WebApiContrib.IoC.Mef https://github.com/WebApiContrib/WebApiContrib.IoC.Mef。我目前正在推出自己的解决方案,但由于我讨厌重新发明轮子,所以我想我会问一下是否有人知道是否已经有一个解决方案。
在没有找到令我满意的东西后,我最终在假期里自己解决了这个问题。 CodePlex 上的 MEF 贡献有一个良好的开端,但尚未完成。我对它进行了一些修改,并结合了一些研究和反复试验。
我在 Github 上创建了一个项目(链接如下,我知道外部链接不受欢迎,但包含内联代码太多)。其中有四个项目。第一个提供核心组合和拆卸,两个库分别将核心放入 MVC 和 WebAPI 的上下文中,最后一个只是一个快速示例 MVC 应用程序,其中有两个控制器,每个控制器都依赖于注入的另一个类。需要注意的是,我认为 WebAPI 项目尚未完成,因为它尚未包含 WebAPI 过滤器提供程序的设施(也许还有我还没有想到或需要的其他东西)。
我希望这有帮助。
https://github.com/rlvandaveer/Heliar-Web-Composition https://github.com/rlvandaveer/Heliar-Web-Composition
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)