我正在尝试弄清楚如何使用hostbuilder模式来运行控制台应用程序(而不是windows服务)。其目的是使流程与WebApi相似,以保持开发实践的相似性。我见过使用HostedService或BackGroundService的示例,他们希望将其作为windows服务运行。但是,如果我希望运行一个简单的控制台应用程序,我应该在哪里指定我的入口点类和方法呢?在hostbuilder.Build()中,我可以看到Run()和RunAsync()方法。但是我不知道它会执行什么?
我见过其他示例,您可以在其中创建服务收集,然后使用serviceprovider.GetService().SomeMethod()来启动进程。但这有点偏离了我们想要做的事情。因此,请建议如何指定启动过程。我们使用的是3.1 .Net核心。
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()
;
}发布于 2021-07-15 21:29:17
我会从默认的worker模板开始。
dotnet new worker -n MyCli然后打开Program.cs并构建主机。如果您不想使用托管服务路由,请删除Worker托管服务。
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.
});
}构建您的逻辑:
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方法内部注册类
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddTransient<MyService>();
});现在您可以在Main方法中解析和调用它:
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
var myService = host.Services.GetRequiredService<MyService>();
myService.DoSomething();
}https://stackoverflow.com/questions/68392429
复制相似问题