gpt4 book ai didi

c# - 网络服务器在 IHostedService 启动之前开始处理请求

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:29 27 4
gpt4 key购买 nike

有没有办法配置.net core/autofac等待HostedService完成启动?

简单的例子

#define useAutofac

public class Startup
{
#if useAutofac
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterType<HostedService>().As<IHostedService>().SingleInstance();
}
#else
public void ConfigureServices(IServiceCollection services)
{
services.AddHostedService<HostedService>();
}
#endif
}

class HostedService : IHostedService
{
// snip
}

完整样本:gist

没有 #define useAutofac 执行顺序符合预期

最佳答案

问题很可能与您如何使用 Autofac 注册托管服务有关。

即使没有在 ConfigureContainer 中手动注册,内部也是 AutofacServiceProviderFactory factory for 将提取服务集合中的所有已注册服务,并将它们复制到 Autofac 的容器中。

 builder.Populate(services);

Source

所以Startup可以保持为

public class Startup {

public void ConfigureServices(IServiceCollection services) {
services.AddHostedService<HostedService>();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {

//...

}
}

正确注册并复制到 Autofac 的供应商以供使用。

您还可以考虑移动我们的 Startup 并在构建主机时配置它

public static async Task Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
#if useAutofac
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
#endif
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
.ConfigureServices(services => {
services.AddHostedService<HostedService>();
})
.Build();

await host.RunAsync();
}

这样,任何托管服务都将在主机运行时启动。

关于c# - 网络服务器在 IHostedService 启动之前开始处理请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58977827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com