更新到.net core 2.2之后,我们遇到以下问题:
Autofac.Core.Registration.ComponentNotRegisteredException:' 请求的服务“ Microsoft.AspNetCore.Hosting.Server.IServer”具有 尚未注册。为避免此异常,请注册一个 提供服务的组件,使用检查服务注册 IsRegistered(),或使用ResolveOptional()方法来解析 可选的依赖项。'
我们正在使用preBuilder.Populate(services);
。
有什么想法吗?
感谢您的帮助
答案 0 :(得分:0)
关注Microsoft migration guide for migrating from Core 2.1 to 2.2时,我遇到了同样的问题。
如果您不使用 WebHost.CreateDefaultBuilder 创建默认的虚拟主机生成器,并且您在 CreateWebHostBuilder 中进行更改,则可能会出现问题。迁移指南中建议的 Program 类的方法调用 ConfigureKestrel 而不是 UseKestrel 。
据我了解,如果您使用 WebHost.CreateDefaultBuilder 创建默认的Web主机构建器,它已经调用了 UseKestrel ,该注册了 IServer 服务。但是,如果还使用 UseIIS ,则可能会遇到一些conflicts,因此,为了避免出现此问题,有一个新的 ConfigureKestrel 调用,该调用未注册 IServer 。所以我认为,如果您不使用 WebHost.CreateDefaultBuilder ,那么您仍然需要显式调用 UseKestrel 或 UseIIS 。
当然,这可能是导致您遇到问题的其他原因,但是我怀疑盲目地遵循迁移指南(像我一样)可能会给许多开发人员带来麻烦。