.net core 如何在dotnet core控制台启动时运行特定服务

.net core 如何在dotnet core控制台启动时运行特定服务,.net-core,dependency-injection,console-application,serilog,mediatr,.net Core,Dependency Injection,Console Application,Serilog,Mediatr,在.NET Core控制台应用程序中,我想在Program.cs中执行此操作: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog() .UseServiceProviderFactory(new AutofacServiceProviderFactor

在.NET Core控制台应用程序中,我想在Program.cs中执行此操作:

   public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .UseSerilog()
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureServices(serviceCollection =>
                    {
                        serviceCollection.AddSingleton(new MyService()); // error on this line
                        
                    });
                    webBuilder.UseStartup<Startup>();
                });
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.useserlog()
.UseServiceProviderFactory(新的AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.ConfigureServices(serviceCollection=>
{
serviceCollection.AddSingleton(new MyService());//此行出错
});
webBuilder.UseStartup();
});
我得到的错误是:

没有给出与所需的形式化参数相对应的参数 “MyService(ILogger,IMediator)”的参数“logger”

当我调用MyService的构造函数时,我不知道应该如何添加2个必需的参数(serilog记录器和mediat-r实例)

我需要这个,因为当我打开/运行控制台时必须调用一次服务…

您可以使用以下代码:

servicecolection.AddSingleton(ctx=>newmyservice(ctx.GetService(),ctx.GetService());
但是注入
IMediator
的实例并不是一个好主意,它的生存期(我猜,因为它通常是有范围的)比您的
MyService
要短

一些信息:

不要依赖于来自单例服务的瞬态服务或作用域服务。因为当单例服务注入瞬态服务时,瞬态服务将成为单例实例,如果瞬态服务的设计不支持这种情况,则可能会导致问题。在这种情况下,ASP.NET Core的默认DI容器已经抛出异常