asp.net-mvc - 如何使用 ASP.NET MVC、WebAPI 和 MEF 正确确定每个请求的组合范围

标签 asp.net-mvc asp.net-web-api mef mef2

我最近使用各种资源(包括此 SO 答案 How to integrate MEF with ASP.NET MVC 4 and ASP.NET Web API)将 MEF 添加到 MVC/WebAPI 应用程序中.虽然这工作了一段时间,但我开始收到与建立数据库连接相关的间歇性错误,最常见的错误是:“System.InvalidOperationException:超时已过期。在从池中获取连接之前超时时间已过。这可能发生,因为所有池连接都在使用中,并且达到了最大池大小。”

我意识到我正在泄漏连接,但不明白为什么。我所有的存储库都实现了 IDisposable 并在完成后处理了它们的连接。在我的 dispose 方法中设置断点很快就会发现它们从未被命中。当我基于上面链接的示例的代码时,我注意到缺少任何清理,但是作为 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 .目前我正在推出自己的解决方案,但由于我讨厌重新发明轮子,我想我想问问是否有人知道是否有人已经知道了。

最佳答案

在没有找到任何令我满意的东西之后,我最终在假期自己解决了这个问题。 CodePlex 上的 MEF 贡献有一个良好的开端,但尚未完成。我对它进行了一些修改,并将其与一些研究和反复试验相结合。

我在 Github 上创建了一个项目(下面的链接,我知道外部链接不受欢迎,但包含内联的代码太多了)。其中有四个项目。第一个提供核心组合和拆卸,两个库分别将核心放入 MVC 和 WebAPI 的上下文中,最后一个只是一个快速示例 MVC 应用程序,具有两个 Controller ,每个 Controller 都依赖于另一个注入(inject)的类。需要注意的是,我认为 WebAPI 项目尚未完成,因为它还没有包含 WebAPI 过滤器提供程序的设施(可能还有其他我没有想到或需要的东西)。

我希望这有帮助。

https://github.com/rlvandaveer/Heliar-Web-Composition

关于asp.net-mvc - 如何使用 ASP.NET MVC、WebAPI 和 MEF 正确确定每个请求的组合范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806239/

相关文章:

c# - 如何让 RazorEngine Parse 方法成功处理布局?

jquery - asp.net MVC ajax 确实回发而不是在我的 div 中渲染部分 View

c# - ASP.NET WebAPI OData 406

c# - ASP.Net WebAPI RC ILogger

c# - 如何让 DirectoryModuleCatalog 工作?

c# - mef - 如何自动进行重组?

javascript - Kentor SAML2 授权问题

asp.net-mvc - MiniProfiler 和 AngularJS

c# - 使用 MVC Web API 发布对象数组

.net - MEF 导入在 Windows 服务中失败