首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用通用主机构建器运行.NET核心控制台应用

如何使用通用主机构建器运行.NET核心控制台应用
EN

Stack Overflow用户
提问于 2021-07-15 18:48:36
回答 1查看 2.2K关注 0票数 4

我正在尝试弄清楚如何使用hostbuilder模式来运行控制台应用程序(而不是windows服务)。其目的是使流程与WebApi相似,以保持开发实践的相似性。我见过使用HostedService或BackGroundService的示例,他们希望将其作为windows服务运行。但是,如果我希望运行一个简单的控制台应用程序,我应该在哪里指定我的入口点类和方法呢?在hostbuilder.Build()中,我可以看到Run()和RunAsync()方法。但是我不知道它会执行什么?

我见过其他示例,您可以在其中创建服务收集,然后使用serviceprovider.GetService().SomeMethod()来启动进程。但这有点偏离了我们想要做的事情。因此,请建议如何指定启动过程。我们使用的是3.1 .Net核心。

代码语言:javascript
复制
class Program
{
    static async void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();
        await host.RunAsync();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices((hostBuilderContext, serviceCollection) => new Startup(hostBuilderContext.Configuration).ConfigureServices(serviceCollection))
        .UseSerilog()
        ; 

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-15 21:29:17

我会从默认的worker模板开始。

代码语言:javascript
复制
dotnet new worker -n MyCli

然后打开Program.cs并构建主机。如果您不想使用托管服务路由,请删除Worker托管服务。

代码语言:javascript
复制
public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                // remove the hosted service
                // services.AddHostedService<Worker>();

                // register your services here.
            });
}

构建您的逻辑:

代码语言:javascript
复制
internal class MyService
{
    // you can also inject other services
    private ILogger<MyService> _logger;

    public MyService(ILogger<MyService> logger)
    {
        _logger = logger;
    }

    public void DoSomething()
    {
        _logger.LogInformation("Doing something");
    }
}

然后在.ConfigureServices方法内部注册类

代码语言:javascript
复制
Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.AddTransient<MyService>();
    });

现在您可以在Main方法中解析和调用它:

代码语言:javascript
复制
public static void Main(string[] args)
{
    var host = CreateHostBuilder(args).Build();
    var myService = host.Services.GetRequiredService<MyService>();
    myService.DoSomething();
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68392429

复制
相关文章

相似问题

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