首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >全局检索.NET通用主机引用

全局检索.NET通用主机引用
EN

Stack Overflow用户
提问于 2022-01-14 04:29:35
回答 2查看 98关注 0票数 0

让我们考虑这个基于通用主机的.NET 6简单应用程序(没有ASP.NET)

代码语言:javascript
运行
复制
internal sealed class Program
{
    private static async Task Main(string[] args)
    {
        await Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<MyService>();
            })
            .RunConsoleAsync();
    }
}

是否有一种全局检索IHost实例引用的方法(我的意思是,没有DI机制)?

我在找这样的东西:

代码语言:javascript
运行
复制
IHost host = Microsoft.Extensions.Hosting.Context.CurrentHost

编辑

当然,在Main内部,我可以获得主机,但是我想从代码的任何地方访问它(按照标题全局访问,而不创建应用程序全局变量)。作为类似的例子,在.net中,我们可以以AppDomain.CurrentDomain的形式访问当前的应用程序域。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-15 00:24:12

问题的正确答案是,IHost对象不像应用程序域。虽然对于运行中的应用程序存在全局当前应用程序域的概念,但不存在全局当前IHost实例的概念。一个应用程序中可以有多个IHost实例,因此应用程序代码负责跟踪它们是有意义的。因此,正确的解决方案是存储IHost引用,并在应用程序代码中提供全局访问机制。

票数 0
EN

Stack Overflow用户

发布于 2022-01-14 10:20:46

您可以在单独的步骤中构建和运行主机:

代码语言:javascript
运行
复制
// 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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70706042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档