在启动时验证DI容器



我想在应用程序一开始就验证我的DI容器(也就是检查我是否忘记在启动类中添加DI注册(。也就是说,一旦添加了所有服务,我想尝试解决其中的每一个,这样,如果我忘记了一个,应用程序就会抛出一个异常。

当然,我只想在DEBUG模式下这样做。对于默认的NETCoreDI容器,我可以遍历服务并尝试解析所有服务(如下面的情况(,但我如何通过Autofac(最好在ConfigureContainer中(做到这一点?

#if DEBUG
var sp = services.BuildServiceProvider();
foreach (var item in services)
{
_ = sp.GetRequiredService(item.ServiceType);
}
#endif

Autofac不提供容器注册验证,在不久的将来也没有这样做的计划。我在那里链接的问题解释了原因,但长话短说——由于有太多的东西可以来自lambdas和动态代码,所以有太多无法验证。这看起来像是假阳性或"假阳性";我们验证了容器的50%,但没有验证其他50%,因为它是动态的;会给人们一种虚假的安全感,或者更有可能只是让人们对结果不正确感到愤怒"我的容器验证了,但这个东西失败了!Autofac糟透了">

另一方面,Autofac 6.0引入了一种强大的诊断机制,用于故障排除和跟踪问题。如果你遇到问题,这样可以更容易地找出原因。

最新更新