如何在已发布的网站中调试依赖项注入失败

时间:2014-09-24 23:18:09

标签: asp.net-mvc dependency-injection autofac

最近我遇到了这个问题,其中带有Autofac作为DI的ASP.Net MVC网站在我的本地IIS中工作正常但是当我在Azure中发布它时,它没有被重定向到默认控制器,而是它向我显示欢迎页面。 我做了很多事情,终于知道像逐行检查web.config文件这样的问题。 是否有任何简单的机制来捕获生产/发布环境中的DI故障?

2 个答案:

答案 0 :(得分:0)

具体来说,Autofac并不比调试其余应用程序所需的机制更容易。记录是您应该实现的第一个工具。鉴于这是一个生产环境,您可能已经拥有某种形式的日志记录基础架构。

解决Autofac中的失败(例如,当Autofac无法满足构造函数参数要求时)导致异常,除非明确处理,否则可以使用the Application_Error event handler在应用程序级别处理和记录异常。

如果没有异常,或者在MVC堆栈中的某处吞下异常,您可以连接容器Scope和Resolve事件并记录活动。通过这种方式,您可以了解Autofac在生产环境中所做的工作。 This SO question讨论了容器事件和组件注册事件。

答案 1 :(得分:0)

执行此操作的方法是验证是否可以创建所有根注册。您可以创建一个循环遍历所有注册的单元测试,并尝试逐个解析它们。能够做到这一点非常重要,因为使用DI时,应用程序代码本身并不负责维护实现之间的依赖关系,因此编译器将无法验证依赖关系图是否正确。虽然编译器不可能验证依赖图,但仍然可以验证依赖图是否可行,因为不这样做会迫使您单击整个应用程序并最终导致您自己进入的情况。

不幸的是,我发现这实际上很难用Autofac做。我很确定这应该是可能的,但我从来没有这样做。其他一些DI容器可以更容易地验证容器的配置并检查其他常见的配置错误。