我有一个简单的 C# .NET Core 5 控制台应用程序,需要添加依赖注入(Microsoft.Extensions.DependencyInjection)。如果它应该启动一个微服务,我知道如何做到这一点,但如果我只想将其作为带有 DI 的常规控制台应用程序运行,该怎么办?
我得到了这段代码:
static void Main(string[] args)
{
var serviceName =
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
var configurationBuilder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json").Build();
var appSettings = configurationBuilder.Get<AppSettings>();
Log.Information("{@serviceName} test starting up.", serviceName);
Host.CreateDefaultBuilder(args)
.UseMyAppMQ(context => context.UseSettings(appSettings.MQSettings))
.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration))
.ConfigureServices((hostContext, services) =>
{
services
.Configure<MQSettings>(configurationBuilder.GetSection("MQSettings"))
.AddTransient<ITestController>(s => new TestController());
})
.Build().Run();
Log.Information("{@serviceName} test closing down.", serviceName);
}
我需要一个入口点来运行我的底层类的运行方法,但怎么做呢?
敬礼
dotnet new worker
并检查代码。这将创建一个控制台应用程序,启动所有已注册的BackgroundService
派生类。如果您想在其中一个服务结束时终止应用程序,则必须通过注入IHostApplicationLifetime
并调用StopApplication()
来告诉主机。 - Panagiotis KanavosRun()
,只需使用Build()
获取主机。从主机显式请求“服务”,调用其方法,并在完成后退出应用程序。 - Panagiotis Kanavos