gpt4 book ai didi

c# - 使用通用 IHostBuilder 时访问 IServiceProvider

转载 作者:行者123 更新时间:2023-12-04 14:21:57 24 4
gpt4 key购买 nike

我正在使用 IHostBuilder在 .NET Core 2.1 控制台应用程序中。主要看起来像这样:

    public static async Task Main(string[] args)
{
var hostBuilder = new HostBuilder()
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureServices(services =>
{
// Register dependencies
// ...

// Add the hosted service containing the application flow
services.AddHostedService<RoomService>();
});

await hostBuilder.RunConsoleAsync();
}
}

之前,与 IWebHostBuilder , 我有 Configure()让我这样做的方法:
public void Configure(IApplicationBuilder applicationBuilder, IHostingEnvironment environment)
{
// Resolve something unrelated to the primary dependency graph
var thingy = applicationBuilder.ApplicationServices.GetRequiredService<Thingy>();
// Register it with the ambient context
applicationBuilder.AddAmbientThingy(options => options.AddSubscriber(thingy));

// Use MVC or whatever
// ...
}

这允许我注册一些环境(使用环境上下文模式),而不是应用程序主要依赖关系图的一部分。 (如您所见,我仍然使用容器来实例化它,这当然比手动更新更可取。我们可以将其视为辅助的环境依赖图。)

使用通用主机构建器,我们似乎永远无法访问构建的 IServiceProviderIApplicationBuilder .在这种情况下如何实现相同的注册?

最佳答案

显然,而不是调用 RunConsoleAsync()扩展,我们可以拆分该方法采取的简单步骤,允许我们在构建和启动之间做一些事情:

        await hostBuilder
.UseConsoleLifetime()
.Build()
.AddAmbientThingy(options => options.AddSubscriber(thingy))
.RunAsync();

关于c# - 使用通用 IHostBuilder 时访问 IServiceProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53484777/

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