让我们考虑这个基于通用主机的.NET 6简单应用程序(没有ASP.NET)
internal sealed class Program
{
private static async Task Main(string[] args)
{
await Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<MyService>();
})
.RunConsoleAsync();
}
}是否有一种全局检索IHost实例引用的方法(我的意思是,没有DI机制)?
我在找这样的东西:
IHost host = Microsoft.Extensions.Hosting.Context.CurrentHost编辑
当然,在Main内部,我可以获得主机,但是我想从代码的任何地方访问它(按照标题全局访问,而不创建应用程序全局变量)。作为类似的例子,在.net中,我们可以以AppDomain.CurrentDomain的形式访问当前的应用程序域。
发布于 2022-01-15 00:24:12
问题的正确答案是,IHost对象不像应用程序域。虽然对于运行中的应用程序存在全局当前应用程序域的概念,但不存在全局当前IHost实例的概念。一个应用程序中可以有多个IHost实例,因此应用程序代码负责跟踪它们是有意义的。因此,正确的解决方案是存储IHost引用,并在应用程序代码中提供全局访问机制。
发布于 2022-01-14 10:20:46
您可以在单独的步骤中构建和运行主机:
// host can be assigned to some static field/property
// Or passed somehow else to the place where you want to use it.
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// ...
})
.UseConsoleLifetime()
.Build();
await host.RunAsync();https://stackoverflow.com/questions/70706042
复制相似问题