Asp.net mvc 如何调试已发布网站中的依赖项注入失败

Asp.net mvc 如何调试已发布网站中的依赖项注入失败,asp.net-mvc,dependency-injection,autofac,Asp.net Mvc,Dependency Injection,Autofac,最近,我遇到了这样一个问题:一个以Autofac为DI的ASP.Net MVC网站在我的本地IIS中运行良好,但当我在Azure中发布它时,它没有被重定向到默认控制器,而是显示了欢迎页面。 我做了很多事情来最终了解问题所在,比如逐行检查web.config文件。 在生产/发布环境中,是否有任何简单的机制可以捕获DI故障?对于Autofac来说,没有比调试应用程序其余部分更简单的机制了。日志记录是您应该实现的第一个工具。考虑到这是一个生产环境,您可能已经有了某种形式的日志记录基础设施 解决Auto

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

对于Autofac来说,没有比调试应用程序其余部分更简单的机制了。日志记录是您应该实现的第一个工具。考虑到这是一个生产环境,您可能已经有了某种形式的日志记录基础设施

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


如果没有异常,或者异常被MVC堆栈中的某个地方吞没,您可以连接到容器范围,解析事件并记录活动。这样,您就可以了解Autofac在生产环境中的工作。讨论容器事件和组件注册事件。

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

不幸的是,我发现使用Autofac实际上很难做到这一点。我很确定这应该是可能的,但我从来没有让它工作。其他一些DI容器使验证容器配置和检查其他常见配置错误变得相当容易。

请参阅