Startup.cs ist ziemlich ASP.NET Core-spezifisch, die an sich ist ein Web-Stack und kommt mit WebListener oder Kestrel gehostet hinter IIS.
In einer Konsolenanwendung würden Sie kein traditionelles Startup.cs verwenden, obwohl Sie eine konsistente Basis haben könnten, aber es würde ein bisschen anders aussehen, weil Sie die Kontrolle über die Erstellung des IoC Containers haben ASP.NET Core macht es für Sie in einer Webanwendung). Normalerweise wird das Startup.cs von der WebHostBuilder
in Program.cs
verarbeitet, damit es seine eigenen Sachen injizieren kann, bevor die IServiceCollection
an die ConfigureServices
Methode übergeben wird.
Sie haben recht, dass Sie eine Konsolenanwendung benötigen und dort würden Sie alles selber machen.
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>();
...
}
}
Was Sie als Host verwenden möchten, bleibt Ihnen überlassen. Es könnte das heißt einer Azure Web-Task/Host sein:
using(var jobHost = new JobHost(new JobHostConfiguration(Configuration.GetConnectionString("AzureWebJobsDashboard"))))
{
jobHost.RunAndBlock();
}
, die die Anwendung laufen beginnen würde und halten und Azure-Nachrichten und Ereignisse in ihm registriert erhalten. Oder Sie verwenden einige der anderen Hintergrundaufgaben Frameworks wie Hangfire.
In ASP.NET Core all dies wird durch das Framework behandelt, aber ASP.NET Core ist für Web-Sachen gemacht und hängt daher von einem Endpunkt ab. Das meiste Zeug in Configure
Methode der Startup
Klasse in ASP.NET Core-Anwendung verwendet wird über die Registrierung von Middlewares, die auf der HttpContext
arbeiten. Sie haben diese nicht in einem Microservice ohne einen Endpunkt. Kein Endpunkt, keine HttpContext
, keine Notwendigkeit für Middleware.
Natürlich haben Sie auch keine IApplicationBuilder
in einer Konsolenanwendung, nur eine IServiceProvider
, um die Dienste zu lösen, die Sie zuvor registriert haben.
Großartig, ich werde dies eine Chance geben und Bericht erstatten – TalMcMahon