Startup.cs与ASP.NET Core特有的相当,它本身就是一个Web栈,并且由IIS后面的WebListener或Kestrel托管。
在控制台应用程序中,您不会使用传统的Startup.cs,尽管您可以拥有一致的基础,但它看起来有点不同,因为您控制创建IoC容器(而不是ASP.NET Core在Web应用程序中为您完成)。正常情况下,Startup.cs由WebHostBuilder
在Program.cs
中处理,以允许它在将IServiceCollection
传递给ConfigureServices
方法之前注入它自己的东西。
你说得对,你需要一个控制台应用程序,你可以自己做所有的事情。
public class Program
{
public IConfigurationRoot Configuration { get; private set; }
public IServiceProvider Provider { get; private set; }
public static void Main()
{
var programm = new Programm();
program.Run();
}
private void Run()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
var services = new ServiceCollection();
ConfigureServices(services);
this.Provider = services.BuildServiceProvider();
var host = this.Provider.GetRequiredService<MyHost>();
// blocking operation, the host should be something that keeps the service running
// once it stops, the application stops too as there are no additional
host.Run();
}
private void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IMyService, MyService>();
services.AddSingleton<MyHost>();
...
}
}
你想用作主机,取决于你。它可以是Azure Web任务/主机:
using(var jobHost = new JobHost(new JobHostConfiguration(Configuration.GetConnectionString("AzureWebJobsDashboard"))))
{
jobHost.RunAndBlock();
}
它将启动并保持应用程序运行并接收在其中注册的Azure消息和事件。或者你使用一些像Hangfire这样的其他后台任务框架。
在ASP.NET Core中,所有这些都是由框架处理的,但ASP.NET Core是针对Web的东西而设计的,因此取决于端点。 ASP.NET Core应用程序中使用的Startup
类的Configure
方法中的大部分内容都是关于注册中间件的,这些中间件在HttpContext
上工作。你没有这些微服务而不是端点。没有端点,没有HttpContext
,不需要中间件。
当然,您还没有在控制台应用程序中使用IApplicationBuilder
,只需要IServiceProvider
即可解决您之前注册的服务。
太好了,我会给这个镜头并报告回来 – TalMcMahon