所请求的服务“ Microsoft.AspNetCore.Hosting.Server.IServer”尚未注册

时间:2019-01-03 12:39:45

标签: autofac

更新到.net core 2.2之后,我们遇到以下问题:

  

Autofac.Core.Registration.ComponentNotRegisteredException:'   请求的服务“ Microsoft.AspNetCore.Hosting.Server.IServer”具有   尚未注册。为避免此异常,请注册一个   提供服务的组件,使用检查服务注册   IsRegistered(),或使用ResolveOptional()方法来解析   可选的依赖项。'

我们正在使用preBuilder.Populate(services);

有什么想法吗?

感谢您的帮助

1 个答案:

答案 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

当然,这可能是导致您遇到问题的其他原因,但是我怀疑盲目地遵循迁移指南(像我一样)可能会给许多开发人员带来麻烦。